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

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

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

#1

投稿記事 by ノダッシー » 8年前

件名の通りです
常に決まった位置に文字や画像を表示したいのですが、解像度が変わると文字の位置がズレてしまいます
解決方法はありますでしょうか?
よろしくお願いします

コード:

#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;
}

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 8年前

「常に決まった位置」とはどういう意味でしょうか。
解像度にかかわらず50, 280に描画しているのは「常に決まった位置」ではないのですか?

Referia
記事: 24
登録日時: 9年前
住所: 奈良

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

#3

投稿記事 by Referia » 8年前

おそらく文字や画像の中心点がずれているので決まった位置に描画されないということと認識しました。
間違っているかもしれませんが一応それに関して書きますね。

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

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

ノダッシー

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

#4

投稿記事 by ノダッシー » 8年前

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

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

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

#5

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

全部自動では出来ないので、2つの選択肢がありますね。

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

フルスクリーンならSetFullScreenScalingModeがあります。
それと単なる拡縮ではなくアンチエリアスを考慮したほうが良いのと元の映像を高解像度で用意して縮小したほうが見栄えが良くなる場合が多いかと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ノダッシー

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

#6

投稿記事 by ノダッシー » 8年前

ソフト屋さん詳しいレスありがとうございます
自動で縦横比を調節してくれる命令があるのかと思っていたのですが甘かったですね
自分で描画を上手い事調節するように2の方法で作成してみたいと思います
ありがとうございました

閉鎖

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