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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
samba

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

#1

投稿記事 by samba » 10年前

はじめまして。

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

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 10年前

マウスの本家関数をそのまま使わず、マウスの座標を変換処理する関数を別に用意すれば、大した手間では無い様に思います。
その関数から得られるのは、1024*768の内部座標系に変換したものにすればよいわけですから。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
a5ua
記事: 199
登録日時: 13年前

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

#3

投稿記事 by a5ua » 10年前

http://homepage2.nifty.com/natupaji/DxL ... html#R11N4
SetWindowSizeExtendRate()を使えば特別な処理なしに、複数解像度に対応できると思います。

samba

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

#4

投稿記事 by samba » 10年前

ありがとうございます。

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

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

#5

投稿記事 by softya(ソフト屋) » 10年前

置き換える事はエディタの文字列の置換で容易だと思いますけど。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る