トップページ > 記事閲覧
Android版: 端末の向きによって画面解像度を変えたい
名前:Oomimi 日時: 2018/02/11 20:36

いつも大変お世話になっております。 また失礼します。 Androidの端末の向きによって自動的に画面解像度を変えるプログラムを作りたいと思っています。 例)1920*1080の端末だとしたら、 向きを縦にしたら画面解像度が縦1920*横1080になり、 向きを横にしたら画面解像度が縦1080*横1920にする感じです。 そこで、GetAndroidDisplayResolutionを毎フレーム使って 解像度(向き)が変わったら画面サイズを変えるという処理を行おうとしましたが、 どうやらGetAndroidDisplayResolutionはDxLib_Initの呼び出しでサイズを取得する仕様のようでして 途中から向きを変えた解像度は取得できませんでした。 GetAndroidDisplayResolutionの毎フレームチェックする版の関数はありますでしょうか? または、端末の向きを取得する関数はありますでしょうか? よろしくお願いします。
メンテ

Page: 1 |

Re: Android版: 端末の向きによって画面解像度を変えたい ( No.1 )
名前:管理人 日時:2018/02/12 00:15

> どうやらGetAndroidDisplayResolutionはDxLib_Initの呼び出しでサイズを取得する仕様のようでして > 途中から向きを変えた解像度は取得できませんでした。 GetAndroidDisplayResolutionはDxLib_Initの呼び出しでサイズを取得する仕様、という訳ではないのですが、 環境によってはそのような挙動になってしまうようです( 手元の環境 F-02H では常に最新のサイズが返ってきます・・・ ) 複数のプラットフォームに対応しているAPIである EGL の eglQuerySurface という関数を使用して解像度を取得するように していたのですが、ANativeWindow_getWidth と ANativeWindow_getHeight という、より Androidネイティブな機能がありましたので そちらを使用するように処理を変更してみました 手元でも変更前は正常に回転後の解像度が反映されなかったエミュレーター環境でも変更後は正常に回転後の解像度が 反映されるようになりましたので、Oomimiさんの環境でも正常に動作する可能性が高いと思います よろしければその変更を加えたこちらのバージョンをお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 > または、端末の向きを取得する関数はありますでしょうか? 端末の向きを取得する関数は Java からしか使用できないようなので、DXライブラリの関数として追加するのは無理そうです・・・
メンテ
Re: Android版: 端末の向きによって画面解像度を変えたい ( No.2 )
名前:Oomimi 日時:2018/02/12 02:01

迅速な対応ありがとうございます。 無事に向きを変えられることが出来ました。 しかし、重要な問題が発生しまして… 端末の向きを変えて画面サイズを変更した後、 メモリに読み込んである画像が線画できなくなり、画面が点滅する不具合が発生しました。 今、開発しているゲームのコードだと長すぎるので、確認用に以下の簡単なコードを書いてみましたが、 やはり同じ不具合が発生しました。 対策がわからないのでご教授お願い致します。 #include "DxLib.h" int android_main() { if (DxLib_Init() == -1) return -1; int SizeX = 800; int SizeY = 600; GetAndroidDisplayResolution(&SizeX, &SizeY); SetGraphMode(SizeX, SizeY, 32); if (SetDrawScreen(DX_SCREEN_BACK)) { DxLib_End(); return -1; } int money = LoadGraph("picture/item/money.png"); int NewSizeX = 800; int NewSizeY = 600; while (!ProcessMessage() && !ScreenFlip() && !ClearDrawScreen() && !CheckHitKey(KEY_INPUT_ESCAPE)) { DrawGraph(0, 0, money, TRUE); GetAndroidDisplayResolution(&NewSizeX, &NewSizeY); if (NewSizeX != SizeX || NewSizeY != SizeY) { SetGraphMode(NewSizeX, NewSizeY, 32); SetDrawScreen(DX_SCREEN_BACK); SizeX = NewSizeX; SizeY = NewSizeY; } } DxLib_End(); return 0; } > 端末の向きを取得する関数は Java からしか使用できないようなので、DXライブラリの関数として追加するのは無理そうです・・・ わかりました。
メンテ
Re: Android版: 端末の向きによって画面解像度を変えたい ( No.3 )
名前:Oomimi 日時:2018/02/12 06:06

すみません。 SetGraphModeを実行すると読み込んでいた画像が消える仕様でしたね。 メモリから画像を消さずに画面解像度を変える方法はありますでしょうか?
メンテ
Re: Android版: 端末の向きによって画面解像度を変えたい ( No.4 )
名前:管理人 日時:2018/02/13 00:46

> メモリから画像を消さずに画面解像度を変える方法はありますでしょうか? はい、DxLib_Init の呼び出しの後に SetChangeScreenModeGraphicsSystemResetFlag( FALSE ) ; を実行すれば画面解像度を変更してもグラフィックハンドルが無効にならなくなります よろしければお試しください
メンテ
Re: Android版: 端末の向きによって画面解像度を変えたい ( No.5 )
名前:Oomimi(解決) 日時:2018/02/13 04:47

ありがとうございます! 無事に解決できました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存