ページ 11

解像度が変わると表示がズレる

Posted: 2015年5月06日(水) 15:25
by ノダッシー
件名の通りです
常に決まった位置に文字や画像を表示したいのですが、解像度が変わると文字の位置がズレてしまいます
解決方法はありますでしょうか?
よろしくお願いします

コード:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
	
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
	ChangeWindowMode(FALSE); // ウインドウモードかフルスクリーンかTRUEでウインドウモード
	SetGraphMode(800, 600, 16); //画面サイズを設定します
	SetAlwaysRunFlag(TRUE);
	
	int color = GetColor(255, 0, 0);
	int font = CreateFontToHandle("メイリオ", 70, -1, DX_FONTTYPE_ANTIALIASING);    //中フォント

	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0){

		DrawFormatStringToHandle(50, 280, color, font, "TEST");

	}

	DxLib_End(); // DXライブラリ終了処理
	return 0;
}

Re: 解像度が変わると表示がズレる

Posted: 2015年5月06日(水) 16:29
by h2so5
「常に決まった位置」とはどういう意味でしょうか。
解像度にかかわらず50, 280に描画しているのは「常に決まった位置」ではないのですか?

Re: 解像度が変わると表示がズレる

Posted: 2015年5月07日(木) 09:20
by Referia
おそらく文字や画像の中心点がずれているので決まった位置に描画されないということと認識しました。
間違っているかもしれませんが一応それに関して書きますね。

DrawFormatStringToHandleの起点座標は左上になります。
ですので起点座標を変更せず、解像度を変更するとそれに伴い中心座標が変更されます。
なぜなら書き始める「左上の点」は移動していないからです。

ですので起点座標xとyを解像度に応じて変更することで中心座標は変わらずに描画できるようになります。

Re: 解像度が変わると表示がズレる

Posted: 2015年5月07日(木) 11:15
by ノダッシー
レスありがとうございます
解像度にかかわらず50, 280に描画しているのは「常に決まった位置」ではないのですか?
解像度を低く設定すると端が切れたりしてしまうので、どの解像度でも画面の中に体裁よく収まるようにしたいのです
ですので起点座標xとyを解像度に応じて変更することで中心座標は変わらずに描画できるようになります。
DxLibにそういった命令文があるのでしょうか?
キーワード、調べ方、サンプルがあれば教えて頂けるとありがたいです…
よろしくお願いします

Re: 解像度が変わると表示がズレる

Posted: 2015年5月07日(木) 15:36
by softya(ソフト屋)
全部自動では出来ないので、2つの選択肢がありますね。

1.ゲーム自体は640x480の画面に描画して最後に800x600の表示画面に拡大投影する。
http://dixq.net/forum/viewtopic.php?f=3&t=12893
2.表示位置と表示スケールを表示解像度にあわせて計算する描画関数を自分で用意する。
ただしアスペクト比をちゃんと考慮しないと縦伸びしたり横伸びしたりします。

フルスクリーンならSetFullScreenScalingModeがあります。
それと単なる拡縮ではなくアンチエリアスを考慮したほうが良いのと元の映像を高解像度で用意して縮小したほうが見栄えが良くなる場合が多いかと思います。

Re: 解像度が変わると表示がズレる

Posted: 2015年5月08日(金) 15:21
by ノダッシー
ソフト屋さん詳しいレスありがとうございます
自動で縦横比を調節してくれる命令があるのかと思っていたのですが甘かったですね
自分で描画を上手い事調節するように2の方法で作成してみたいと思います
ありがとうございました