前のページ | 次のページ

title image

ホーム | トップ | 掲示板 | FAQ | 検索 | サイト情報 | リンク

+ ホーム > トップ > ゲーム制作講座 > 画面の解像度を変更する

画面の解像度を変更する

ゲームを作っていると「ウインドウ表示じゃなくて、画面全体を使って表示したい」と思うことってありますよね。

Direct X を使っているゲームでは起動時に画面の解像度を変えて(多くは640×480ドット)画面全体を占有しているものが多くありますが、今回はDirect X を使わずに、解像度変更&画面全体を使用する方法をレクチャーします。

解像度の変更と注意点

まずは解像度の変更ですが、これが結構厄介です。Windowsでは画面モードを変えるときに、システムの再起動を必要とする場合があるからです。

ゲームのために一時的に解像度の変更を行いたいだけですから、再起動が必要な場合は処理をキャンセルし、ウインドウ表示で実行できるように設計しましょう。

他にも、Windowsのバージョンや、ビデオボードの種類によっては正しく解像度変更が行えない場合がありますし、ノートパソコンなどの場合は解像度を下げるとかえって使いにくくなることがあります。

解像度変更を行うかどうかを利用者が選択できるよう、オプションをつけておくのが望ましいと思います。

さて、実際の解像度変更のやり方ですが、Windows APIのChangeDisplaySettingsを使うと解像度変更ができます。しかし、実行するマシンでどの画面モードが使用できるか分からないのと、前述のWindowsの再起動の問題がありますので、プログラムでは再起動せずに変更できる画面モードを調べなくてはいけません。

以上のことを考慮して作成したのがこちらのリストです。オブジェクトとして作成されているので少々の手続きで自作ゲームに組み込めるようになっています。

解像度変更オブジェクトの使い方

まず、オブジェクトを使用するにはプロジェクトに追加する必要があります。

メニューの[プロジェクト]-[プロジェクトに追加]から、Display.cppの追加を行ってください。

次に、ヘッダファイルをインクルードさせます。

下の行をソースコードの先頭に追加しておきます。

#include "Display.hpp"

続いてオブジェクトの生成、解放を行うコードを追加します。青色の部分を追加

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 ChangeDisplay = new TChangeDisplay(this);
}
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
 ChangeDisplay->Free();
}

これで準備は終わりました。

後はプログラム中の解像度変更を行いたいところで、
ChangeDisplay->Change(横のドット数, 縦のドット数)
とすれば解像度の変更が行えます。
もし、関数を呼び出したときに戻り値がfalseだったら解像度変更に失敗しているので、ウインドウ表示で続行できるようにするかエラーを出して停止するようにしてください。

それから、大変重要なことですがプログラムを終了する前には、
ChangeDisplay->Restoration()
を呼び出してもとの解像度に復帰させることを忘れないように。利用者がめーわくします。
※私がテストした環境ではこれで正常に復帰していましたが、マシンによっては設定が変化してしまうこともあります。解像度変更機能の使用有無は利用者が選択できるようにプログラムすることをお勧めします。

ウインドウを画面いっぱいに表示

これは非常に簡単です。最大化したいフォーム名をForm1とすると
Form1->WindowState = wsMaximized;
Form1->BorderStyle = bsNone;

これでキャプションバーを消して最大化させることができます。

ウインドウで表示するのと、画面いっぱいに使うのとでは迫力がぜんぜん違います。今回紹介したコードはDirect X等の特別なドライバなしで実行できるのでゲームを制作している方は組み込んでみてはいかがでしょうか?

1999/6/6 補足

上記のオブジェクトはコンポーネント化されたバージョンができています。ここからダウンロードできます。

Text & Programing by みっくす


目次に戻る


ご意見、ご感想などありましたら、メール又は伝言板への書き込みをお願いします。

E-Mail : m_hikida@muh.biglobe.ne.jp

Copyright (c) 1997-2007 Masaya Hikida