DxLib製ゲームの複数解像度対応
Posted: 2014年1月10日(金) 22:19
はじめまして。
現在、DxLibを使用してゲームプログラムを作っており、その中で2種類の画面解像度に対応させたいと思いました。
そこで自己流にて実装したものの、もっと楽な方法があるのではないかと思い質問します。
1024*768および800*600の2種類の解像度を任意に選択してプレイできるものを考えています。
そこで、まずベースとなるプログラムを1024*768で作り、800*600モードの場合は描画スクリーンをDrawExtendGraphで
0.78125倍(800/1024)に縮小しスクリーンサイズを800*600にすることで実装しています。
しかしこの方法では座標までは縮小されないため、800*600モードの場合にはマウスカーソルの位置がずれて認識されてしまいます。
(例えば(1000, 700)の位置にボタンがあったとして、どちらのモードでも画面右下にボタンは表示されますが(スクリーンが縮小されるので)
800*600モードではどう頑張ってもボタンをクリックすることはできません。((1000, 700)は画面外になってしまうため)
そこでマウスの座標判定をする際には
座標補正率: pow
double pow = 1(1024*768を選択時)
double pow = 0.78125(800*600選択時)
として、
実際のカーソル座標に補正率を掛けることで
(x, y) = (cursor_x * pow, cursor_y * pow)
どちらの解像度でも思った通りの場所をクリックできるようにしました。
ところが、この方法では、マウスの判定が必要な全ての座標に対し、それぞれ補正率を掛ける必要があり
どうしても記述の手間が増えてしまいます。(マウス判定箇所が多いと、それだけ掛け算が必要になってしまいます)
もう少し手間のかからない方法はないかと思っているのですが、良い方法はないでしょうか。
現在、DxLibを使用してゲームプログラムを作っており、その中で2種類の画面解像度に対応させたいと思いました。
そこで自己流にて実装したものの、もっと楽な方法があるのではないかと思い質問します。
1024*768および800*600の2種類の解像度を任意に選択してプレイできるものを考えています。
そこで、まずベースとなるプログラムを1024*768で作り、800*600モードの場合は描画スクリーンをDrawExtendGraphで
0.78125倍(800/1024)に縮小しスクリーンサイズを800*600にすることで実装しています。
しかしこの方法では座標までは縮小されないため、800*600モードの場合にはマウスカーソルの位置がずれて認識されてしまいます。
(例えば(1000, 700)の位置にボタンがあったとして、どちらのモードでも画面右下にボタンは表示されますが(スクリーンが縮小されるので)
800*600モードではどう頑張ってもボタンをクリックすることはできません。((1000, 700)は画面外になってしまうため)
そこでマウスの座標判定をする際には
座標補正率: pow
double pow = 1(1024*768を選択時)
double pow = 0.78125(800*600選択時)
として、
実際のカーソル座標に補正率を掛けることで
(x, y) = (cursor_x * pow, cursor_y * pow)
どちらの解像度でも思った通りの場所をクリックできるようにしました。
ところが、この方法では、マウスの判定が必要な全ての座標に対し、それぞれ補正率を掛ける必要があり
どうしても記述の手間が増えてしまいます。(マウス判定箇所が多いと、それだけ掛け算が必要になってしまいます)
もう少し手間のかからない方法はないかと思っているのですが、良い方法はないでしょうか。