ページ 11

DxLib製ゲームの複数解像度対応

Posted: 2014年1月10日(金) 22:19
by samba
はじめまして。

現在、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)
どちらの解像度でも思った通りの場所をクリックできるようにしました。

ところが、この方法では、マウスの判定が必要な全ての座標に対し、それぞれ補正率を掛ける必要があり
どうしても記述の手間が増えてしまいます。(マウス判定箇所が多いと、それだけ掛け算が必要になってしまいます)

もう少し手間のかからない方法はないかと思っているのですが、良い方法はないでしょうか。

Re: DxLib製ゲームの複数解像度対応

Posted: 2014年1月10日(金) 22:31
by softya(ソフト屋)
マウスの本家関数をそのまま使わず、マウスの座標を変換処理する関数を別に用意すれば、大した手間では無い様に思います。
その関数から得られるのは、1024*768の内部座標系に変換したものにすればよいわけですから。

Re: DxLib製ゲームの複数解像度対応

Posted: 2014年1月10日(金) 23:23
by a5ua
http://homepage2.nifty.com/natupaji/DxL ... html#R11N4
SetWindowSizeExtendRate()を使えば特別な処理なしに、複数解像度に対応できると思います。

Re: DxLib製ゲームの複数解像度対応

Posted: 2014年1月11日(土) 00:12
by samba
ありがとうございます。

既に作ってしまったところは多少の手間はあっても自作の関数に置き換えるということで、
softya様のご意見を採用するのが良いのでしょうか。

SetWindowSizeExtendRateを使うと確かにマウスの位置調整は不要になるのですが、
実行環境(ドライバ)によって挙動が変わるようで、また少なくとも私の環境では縮小時に画像が非常に汚くなってしまい
残念ながらとても使用に耐えうるものとはいえない結果となってしまいました。

Re: DxLib製ゲームの複数解像度対応

Posted: 2014年1月11日(土) 09:14
by softya(ソフト屋)
置き換える事はエディタの文字列の置換で容易だと思いますけど。