> ワイド画面モニタでのフルスクリーンのアスペクト比問題
> (4:3のゲーム画面を他のアスペクト比のワイドモニタでフルスクリーン表示すると、画像が横にのびたりしてしまう問題)
> はサポートされているのでしょうか?
今のところサポートする予定はありません。
基本的にソフトウエア側から出力先のモニターでどのようなドットアスペクト比で表示されているかを
知る方法がありませんので、対応するとしてもソフトウエア側でアスペクト比を指定する形態になると思います。
現在フルスクリーン、ウインドウモードどちらでも採用することができる方法としては
描画可能な画像を作成してその画像を裏画面の代わりとして表示したい内容を書き込み、
その画像を裏画面に希望のアスペクト比で DrawExtendGraph で描画して、その後 ScreenFlip するというものがあります。
手順
準備
SetDrawValidGraphCreateFlag に TRUE を渡して描画可能な画像を作成する指定をする
MakeGraph でゲーム画面として使用したいサイズの画像を作成する
SetDrawValidGraphCreateFlag に FALSE を渡して描画可能な画像を作成する指定を解除する
ゲームループ中
SetDrawScreen に作成した描画可能画像のハンドルを渡して描画可能画像を描画先にする
ゲーム画面を描画する
SetDrawScreen で描画先を裏画面にする
SetDrawMode に DX_DRAWMODE_BILINEAR を渡してバイリニア補間描画の指定をする( これはお好みで )
DrawExtendGraph で裏画面に希望のアスペクト比で描画可能画像を描画する
ScreenFlip で表画面に反映
サンプルプログラム
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int handle, x, add, drawscreen ;
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// 描画可能画像の作成を指定
SetDrawValidGraphCreateFlag( TRUE ) ;
// 320x480 の描画可能画像を作成
drawscreen = MakeGraph( 320, 480 ) ;
// 描画可能画像の作成の指定を解除
SetDrawValidGraphCreateFlag( FALSE ) ;
// 画像の読み込み
handle = LoadGraph( "Test1.bmp" );
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK );
// メインループ(何かキーが押されたらループを抜ける)
x = 0;
add = 8;
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 描画先を描画可能画像にする
SetDrawScreen( drawscreen ) ;
// 画面のクリア
ClearDrawScreen();
// 移動
x += add;
if( x < 0 || x > 320 ) add = -add;
// 画像の描画
DrawGraph( x, 0, handle, TRUE );
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 描画モードをバイリニアフィルタリングモードにする
SetDrawMode( DX_DRAWMODE_BILINEAR ) ;
// 画面いっぱいに描画可能画像を描画する
DrawExtendGraph( 0, 0, 640, 480, drawscreen, FALSE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
因みに SetWindowSizeExtendRate 系の機能は Vista や Windows 7 ではフルスクリーン時に
正常に動作しないので、フルスクリーンでのアスペクト比問題を解決したい場合には使う
ことができません。
SetWindowStyleMode ですが、こちらの引数で有効なものは以下のようになっています
0 :デフォルト
1 :タスクバーなし
2 :タスクバーなし枠なし
3 :枠なし
4 :何もなし
5 :最小化無し
6 :ツールバーに適したウインドウ
DxLib_Init の前に呼んでおくことで起動時のスタイルを変更することが出来ます
ただ、かなり昔に適当に実装した機能なので正常に機能しない可能性もあります・・・