2018年06月21日

VB.NETでDirectX~第1回・基本的な関数について学ぼう!

博士:おっほん。わしが、この『VB.NETでDirectX』を担当する博士じゃ。

助手:助手です。よろしくお願いします。

博士:この講座は、DXライブラリというものを使った、VB.NETによるDirectXプログラミングについて講座、ということじゃ。

助手:『ということじゃ』ってなんですか博士……何はともあれ、よろしくお願いします。

[さっそく導入してみよう!]

博士:さて、導入についてじゃが、これは先々月のB-Magaに載っているから省略するとして……。

助手:ちょ、ちょっと博士! それじゃ不親切すぎますよ! 第一、今日からB-Magaを読み始めた人はどうするんですか?

博士:しかたないのう。では、おーちゃん、よろしく頼む。

助手:おーちゃん?

おーちゃん:おーちゃんじゃ、おーちゃんじゃ!

助手:お、オウム!?

おーちゃん:ここからは、わしが博士に変わって説明するぞ。まずは、ここから、DXライブラリのC#用パッケージをダウンロードするのじゃ。

http://dxlib.o.oo7.jp/dxdload.html

おーちゃん:ここの、『VisualC#用パッケージ』という項目に、ダウンロードするためのリンクがあるぞ。ダウンロードしたら、解凍しておくようにな。

助手:はい、できました。それでは……おーちゃん、次はどうすれば?

おーちゃん:うむ。Visual Studio2017を立ち上げるのじゃ、立ち上げるのじゃ。そしたら、『新しいプロジェクト』をクリックして、プロジェクトの種類は、Visual Basicの、『コンソールアプリ(.Net Framework)』か、『Windowsフォームアプリケーション』を選ぶのじゃ。今回は、『コンソールアプリ(.Net Framework)』を選ぶとしよう。

助手:プログラミング画面が出てきましたね。

おーちゃん:そしたら次は、プロジェクトメニューから、『参照の追加』を選ぶのじゃ。

助手:何やらウィンドウが出ましたね。

おーちゃん:うむ、そしたら『参照』ボタンを押して、開いたファイル選択のウィンドウから、先ほど解凍した中に入っている、DxLibDotNet.DLLを選択するのじゃ。これで準備は完了じゃぞ!

助手:次はいよいよプログラミングですね!

おーちゃん:おっと、その前に一つ注意すべき点がある。プロジェクトを作ると、そのフォルダの中に、Debugフォルダができると思うが、先ほど解凍した中にある、DxLib.DLLとDxLib_x64.DLLを入れておくこと。
そうしないと、実行したときにエラーとなるから気を付けるように。

助手:はい、わかりました。

[まずは簡単なプログラミング]

助手:これなら、もう博士はいらないなぁ。それでおーちゃん、次は……。

博士:わー、待ってくれい。それではわしの仕事がなくなってしまうっ。

助手:あ、起きてきた。そう思うんでしたら、ちゃんと仕事してください、博士。

博士:わ、わかったわい……。ではいよいよプログラミングに移ろうか。まず、ソースファイルの頭にこれを追加するのじゃ。

Imports DxLibDLL.DX

博士:これは簡単に言うと、DXライブラリの命令を、プロジェクトに組み込んで使えるようにするおまじないじゃ。

助手:なるほど。

博士:いよいよプログラムじゃが、まずは基本的な骨組みの部分を紹介していくぞ。これじゃ。

----------
''ウィンドウモードの設定
ChangeWindowMode(1)
''ウィンドウタイトルの設定
SetWindowText("最初のプログラム")

''DXライブラリの初期化
If DxLib_Init() = -1 Then
Exit Sub
End If

''ダブルバッファリング
SetDrawScreen(DX_SCREEN_BACK)

''メインループ
Do
''画面クリア
ClearDrawScreen()

''フリップ
ScreenFlip()

If (ProcessMessage() = -1) Then
Exit Do
End If

If (CheckHitKey(KEY_INPUT_ESCAPE) = 1) Then
Exit Do
End If
Loop
----------

博士:これを、Sub Main()とEnd Subの間に書くのじゃ。

助手:かたかたかた……できました。実行してみますね。

博士:うむ。

助手:真っ黒なウィンドウが出てきました!

博士:うむ、成功したようじゃな。これが、基本的な骨組み。これに色々追加してゲームを作っていくのじゃ。

助手:なるほど!

博士:さて、次はいよいよ、それぞれの関数について説明していくとするぞよ。

[基本的な関数]

博士:まずは、ChangeWindowModeじゃが、これはウィンドウモードで実行するか、それとも全画面で実行するかを設定するものじゃ。1と入れるとウィンドウモードになり、0にすると全画面になる。

助手:なるほど。次のSetWindowTextはもしかして、ウィンドウのタイトルを設定するものですか?

博士:うむ。その通り。そしてこれじゃ。

DxLib_Init

助手:DxLib_Initですか。

博士:うむ。これは簡単に言うと、DXライブラリを使う準備を行う関数じゃ。
この関数は、準備に失敗を返すと-1を返す。DXライブラリのリファレンスでは、-1の場合、ただちにプログラムを終了させるようにと言われておる。

助手:それで、IF文で、この関数が-1のときはExit Subを実行しているってわけですね。

博士:その通りじゃ。それで、次はSetDrawScreenじゃが……じゃが……。

助手:???

博士:おーちゃん、後は頼む……ばた。

助手:………。

おーちゃん:さて、また登場、おーちゃんじゃ。次は、SetDrawScreenじゃが、これはグラフィックを描く対象を、表画面にするか、裏画面にするかを設定する関数じゃ。

助手:表画面? 裏画面?

おーちゃん:表画面は、ディスプレイに表示されている画面にそのまま書く。他方、裏画面はメモリの中に展開されている、画面に表示されていない画面に書くのじゃ。その場合、適当なところで、後述するScreenFlip関数で、書かれた内容を画面に反映させる必要がある。

助手:どうしてそのようなことを?

おーちゃん:基本的に、Windowsでのゲームプログラムでは、後でも説明するが、画面を消しては描きなおす、という手順を使う。なので、表画面にそのまま書いた場合、画面がちらついてしまうのじゃ。

助手:なるほど。

おーちゃん:そこで、裏画面に書いておき、完成したところでそれを表画面に反映させるという手法をとるわけじゃ。ちなみにこれを、専門用語で『ダブル・バッファリング』というぞ。

助手:なるほど。それで次のClearDrawScreenですが、これはもしかしたら、画面をクリアする関数なのでは?

おーちゃん:うむ、その通り。そして、ScreenFlip関数は、さっきも話したの。裏画面に描画した内容を、画面に反映させる命令じゃ。これを実行させると、裏画面の内容が、画面に表示される。

助手:ふむふむ。次のProcessMessageは?

おーちゃん:これは、Windowsのシステムからのメッセージを処理する関数じゃ。
とはいっても、さほど難しく考えることはない。覚えることは二つ。
『定期的に実行する必要がある』ことと、『そのメッセージの処理でエラーが発生したり、ゲームのウィンドウが閉じられたときに-1』を返す、ということだけじゃ。

助手:ということは、ProcessMessageの入っているIF文は、ウィンドウが閉じられたら、ループを抜けるという意味なのですね?

おーちゃん:うむ、そういうことじゃ。そして最後。DxLib_End。これも難しいことはない。DXライブラリの後始末をする関数じゃ。DXライブラリを使ったプログラムを終了させるときは、必ずこの関数を実行しなければならぬ。

助手:なるほど、わかりました。

おーちゃん:うむ、では今日の講義はここまで。さらばぢゃ。

助手:はい、おつかれさまでした。あ、次の講座は、キャラクターを表示させる方法だそうですよ。それじゃ。

……一時間後。

博士:ふわぁ、良く寝たわい。あれ? 助手、おーちゃん、どこじゃ?



※次の更新は、6月25日。『みくみく音楽館』の予定です。お楽しみに!
posted by 裏編 at 07:12| Comment(0) | VB.NETでDirectX | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください