2018年09月20日

VB.NETでDirectX~第4回・キー入力でキャラを動かそう!

助手:あ、博士、また寝てる。しょうがないなぁ。博士、起きてください。講義の時間ですよ。

博士:すやすや……。

助手:起きないなぁ……あ、そうだ。おーちゃーん。博士寝てるから変わりに……

博士:(がばっ)ま、待ってくれいっ。それはわしが困る。

助手:やっと起きた。おーちゃんに仕事取られたくなかったら、ちゃんと起きて仕事してください博士。

博士:わ、わかっておるわい……。それでは今月は、ジョイパッドやキーボードなどで、キャラクターを動かす方法について説明していくことにするぞい。



[これがプログラムだ!]

博士:ではまずは、第1回と同じように、プロジェクトを作るのじゃ。プロジェクトの種類は、『コンソールアプリ(.Net Framework)』でな。

助手:はい、できました。『参照の追加』の設定や、DLLのコピーもやっておきましたよ。

博士:うむ。わからない読者は、第1回を読み直しておくようにな。さて、ではまず、Module Module1とSub Main()の間に、次のコードを書くのじゃ。

----------
Dim hChara As Integer
Dim x As Integer
Dim y As Integer
----------

博士:そして次は、Sub Main()とEnd Subの間に、次のコードを書くのじゃ。

----------
Dim pad As Integer

''ウィンドウモードの設定
ChangeWindowMode(1)
''ウィンドウタイトルの設定
SetWindowText("キャラクターをジョイパッドで動かすプログラム")

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

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

hChara = LoadGraph("chara.bmp")

x = 100
y = 100

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

pad = GetJoypadInputState(DX_INPUT_KEY_PAD1)

If (pad And PAD_INPUT_UP) <> 0 Then
y = y - 2
End If

If (pad And PAD_INPUT_DOWN) <> 0 Then
y = y + 2
End If

If (pad And PAD_INPUT_LEFT) <> 0 Then
x = x - 2
End If

If (pad And PAD_INPUT_RIGHT) <> 0 Then
x = x + 2
End If

DrawGraph(x, y, hChara, 1)

''フリップ
ScreenFlip()

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

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

博士:そうそう。適当なキャラクターの画像(BMP形式)を、『chara.bmp』の名前でプロジェクトのDebugフォルダに保存しておくようにな。

博士:できたら、実行してみるのじゃ。どうじゃ?

助手:あっ! ジョイパッドやカーソルキーで、キャラを動かせますよ!

博士:うむうむ。それでは、これから、このプログラムのキモについて説明していくぞよ。



[GetJoypadInputState]

博士:このプログラムのキモは、ClearDrawScreen関数の次にある、この文じゃ。

----------
pad = GetJoypadInputState(DX_INPUT_KEY_PAD1)
----------

博士:この関数を使うと、人間が押したジョイパッドやキーボードの情報を返してくれる、というものじゃ。

助手:ふむふむ。この( )の中の引数は?

博士:うむ、これは、これは……。

助手:おや、博士、もしかして?

博士:うっ!!(ばた

助手:あー、やっぱり。おーちゃん、続きを頼みます。

おーちゃん:うむ、おーちゃんじゃ、おーちゃんじゃ。さて、この引数には、どのジョイパッドからの入力を調べるかが入るのじゃ。このDX_INPUT_KEY_PAD1を入れた場合は、キーボードと1番のジョイパッドについての入力の情報が返されるのじゃ。

助手:なるほど。

おーちゃん:ちなみに、DX_INPUT_PAD2を入れると、2番のジョイパッドについての情報から得られるし、DX_INPUT_PAD3とすると、3番のものが得られる。DX_INPUT_KEYだと、キーボードの情報が得られるぞい。

助手:わかりました。それで、この関数の戻り値から、どうやってどのキーが押されたかを調べればいいんでしょう?

おーちゃん:うむ。それは、Andを使えば可能じゃ。この行に注目するのじゃ、するのじゃ。

----------
If (pad And PAD_INPUT_UP) <> 0 Then
----------

おーちゃん:PAD_INPUT_UPとは、上方向を表す定数じゃ。関数の戻り値と、この定数とでAndを取り、その結果が0でなければ押されていることになるのじゃ。

助手:なるほど。そして、下方向をチェックするなら、PAD_INPUT_DOWNと、右方向をチェックするなら、PAD_INPUT_RIGHT、左方向ならPAD_INPUT_LEFTとAndを取ればいいわけですね。十字キー以外のボタンをチェックしたいならどうすればいいのですか?

おーちゃん:うむ。もちろん、それ用の定数もあるぞ。1ボタン(Zキー)ならPAD_INPUT_1、2ボタン(Xキー)ならPAD_INPUT_2を使えばいいのじゃ、いいのじゃ。その他のボタンについては、PAD_INPUT_〇を使えばよいぞ。(〇にはボタンの数字が入る)例えば、ボタン4を調べたければ、PAD_INPUT_4を使えばいいのじゃ。

助手:わかりました……あれ?

おーちゃん:どうしたのじゃ?

助手:移動させ続けると、画面の端を超えて移動して見えなくなるんですよ。画面の端にいくとそこで止まるようにできないんですか?

おーちゃん:うむ。そこは、DXライブラリの話ではなく、普通のプログラミングの話になるのじゃが……例えば、画面の右端、左端で止まるようにすれば、次のようにすればよいのじゃ、よいのじゃ。

----------
If x < 0 Then
x = 0
End If

If x + 64 > 640 Then
x = 640 - 64
End If
----------

おーちゃん:最初のIf文は簡単じゃな。画面左端のX座標は0なので、キャラクターの左端が0(画面の左端)より小さくなったら、強制的にキャラクターの左端を表す変数Xを0にしているのじゃ。

助手:なるほど。それで、次のIfは?

おーちゃん:うむ。この画像のサイズは64(ピクセル)x64(ピクセル)じゃ。なので、キャラクターの右端はx+64となるのじゃ。それが、画面の右端(640)より大きくなったら、その画面の右端である640から、キャラクターの幅である64を引いた位置に、設定しているというわけじゃ。DrawGraphで指定するのは、画面の左上の座標じゃからな。上下の場合も、これを応用すればよい。

助手:わかりました。でも、これだと色々なサイズのキャラがあるとき困りますよね。それに、シューティングのように、640ピクセルx480ピクセルではない画面サイズの場合もありますよね。そうした時はどうすれば?

おーちゃん:ふむ。じゃが、それについてはちょっと宿題にしておこう、しておこう。宿題のヒントとして、この関数を教えておくぞ、教えておくぞ。

----------
GetGraphSize([ハンドル], [幅を格納する変数], [高さを格納する変数])
----------

おーちゃん:これを実行すると、指定したハンドルのサイズを、これまた指定した変数に格納してくれるのじゃ、くれるのじゃ。例えば

----------
GetGraphSize(hnd, w, h)
----------

おーちゃん:とやると、変数hndに格納されたハンドルの画像の幅が変数w、高さが変数hに格納されるのじゃ。

助手:ふむふむ。

おーちゃん:これをさっきの話の内容と組み合わせて考えてみるのじゃ、みるのじゃ。

助手:わかりました、考えてみます。

おーちゃん:うむ。次回は……

博士:うわー、待ったおーちゃんっ。それ以上わしの仕事取らないでくれいっ。
こほん、次回はいよいよ最終回。この問題の答え合わせと、音声を流す方法、そして、文字列を表示させる方法を説明していくぞ。さらばじゃ!



※次の更新は、9月24日。『URAURA Game Reivew』の予定です。お楽しみに!
posted by 裏編 at 14:21| Comment(0) | VB.NETでDirectX | このブログの読者になる | 更新情報をチェックする

2018年08月20日

VB.NETでDirectX~第3回・DrawGraphのバリエーションについて学ぼう!

博士:うむ、わしが博士である。

助手:助手です。よろしくお願いします。それで博士。今月は何をするんでしょうか?

博士:うむ。今月は、先月教えたDrawGraph関数のバリエーションについて説明するぞ! しっかりとついてくるがよい!

助手:おぉ! 博士がやる気いっぱいだ! よろしくお願いします!

[DrawTurnGraph]

博士:さて、今回は、前回とは違う画像を使って学んでいくとするぞ。下の画像をダウンロードして、プロジェクトのDebugフォルダの中に入れておくのだ。

rocket.bmp

助手:はい、できましたよ。

博士:では始めていくとするぞい。

----------
hChara = LoadGraph("chara.bmp")
----------

博士:この部分を……

----------
hChara = LoadGraph("rocket.bmp")
----------

博士:こう書き換え……さらに……

----------
DrawGraph(50, 50, hChara, 1)
----------

博士:この部分を……

----------
DrawGraph(50, 150, hChara, 1)
DrawTurnGraph(50, 250, hChara, 1)
----------

博士:このように書きなおしてみるのじゃ。

助手:かたかた……できました、博士。

博士:では、実行してみよう。どうじゃ?

助手:はい……あっ!

vbdx1808-01.JPG

助手:下のロケットが、ちょうど上のロケットとは逆向きに書かれています!

博士:うむ、この通り、DrawTurnGraphは、画像を左右逆向きに書く関数なのじゃ。例えば、キャラクターを左右両方の向きに書く必要があるときに便利じゃぞ。

[DrawExtendGraph]

博士:さて、次はDrawExtendGraphじゃ。先ほど追加した文の二行目。

----------
DrawTurnGraph(50, 250, hChara, 1)
----------

博士:ここを……

----------
DrawExtendGraph(50, 250, 90, 290, hChara, 1)
----------

博士:このように書きなおすのじゃ。

助手:はい、できました。実行してみますね……おぉっ!!

vbdx1808-02.JPG

助手:下のロケットが小さくなっています!

博士:これだけではないぞ。今度は同じところを……

----------
DrawExtendGraph(170, 150, 370, 350, hChara, 1)
----------

博士:このように書きなおしてみるのじゃ。どうかな?

vbdx1808-03.JPG

助手:今度は、右のほうに、大きいロケットが表示されました!

博士:このように、DrawExtendGraphは、画像を拡大・縮小して表示する関数なのじゃ。元となる画像を、(1番目の引数,2番目の引数)と(3番目の引数,4番目の引数)を対角線とする四角形の領域に拡大・縮小して表示するのじゃ。

助手:なるほど。

博士:ちょっとややこしいが、使いこなせるようになると、例えば大きさの変わるキャラクターを出す時に便利じゃぞ。

助手:そうですね。

[DrawRotaGraph]

博士:では最後は、画像を回転させてみるとしよう。さっきと同じように、

----------
DrawExtendGraph(170, 150, 370, 350, hChara, 1)
----------

博士:と書いたところを……

----------
DrawRotaGraph(250, 200, 1, 3.14 / 4, hChara, 1, 0)
----------

博士:このように書き替えて、実行してみるのじゃ。

vbdx1808-04.JPG

助手:今度は、右のほうに、ロケットが少し傾いて表示されてますよ!

博士:うむ。このDrawRotaGraphは、画像を回転させて表示する関数なのじゃ。この関数は引数の内容が、これまでのものとは違っておるので、一つずつ説明していくとするぞ。

助手:はい。

博士:まず最初の二つは描く位置じゃが、DrawGraph、DrawTurnGraph、DrawExtendGraphの三つが、ここが画像の『左上に』なるように表示するのに対して、DrawRotaGraphでは、ここで指定した位置が、画像の『中心に』なるように表示するのじゃ。間違えないように気を付けるのじゃぞ。

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

博士:そして次の数字は、画像の拡大・縮小の倍率じゃ。この数字を1より小さくすれば縮小し、1より大きくすれば拡大するのだ。例えば、0.4と指定すれば、元の画像の40%の大きさで書くわけじゃな。

助手:はい。そして四つ目は?

博士:これは、画像を回転させる角度じゃ。これはラジアンという特別な角度で指定する。

助手:ラジアン、ですか……少し難しいですね。

博士:心配はいらん。通常の角度とラジアンとは、次の式で変換できるからな。

----------
角度→ラジアン:角度×円周率÷180
ラジアン→角度:ラジアン×180÷円周率
----------

博士:これを基に、計算する関数を作ればなおよしじゃな。

助手:わかりました。そしてその次は、画像のハンドルですね。

博士:その通り。そして、6つ目は毎度おなじみの、背景を透過するかどうかを指定するものじゃ。そして7つ目は、画像を左右反転して表示するかどうか。1を指定すると、左右反転して表示するのじゃ。

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

博士:この他にも、バリエーションはいくつかあるが、ここにある3つのバリエーションと、基本であるDrawGraphがあれば、ゲームを作るには問題……問題……問題ない……ない……

助手:?

博士:うっ!!(ばた

助手:は、博士?

おーちゃん:どうやら、頑張りすぎて燃え尽きたようじゃのう。少し眠ればすぐに目を覚ますじゃろう。

助手:は、はぁ……。

おーちゃん:さて、次回はキーボードやジョイパッドを使って、キャラクターを移動させる方法について説明するぞ。また次回じゃ。

博士:また来月じゃ~(寝言

助手:………。



※次の更新は、8月23日、『たまには息抜きにこんなゲームはいかが?『野球ペンデュラム』』の予定です。お楽しみに!
posted by 裏編 at 15:17| Comment(0) | VB.NETでDirectX | このブログの読者になる | 更新情報をチェックする

2018年07月16日

VB.NETでDirectX~第2回・画像を表示する方法について学ぼう!

おーちゃん:どうもこんにちは。おーちゃんじゃ、おーちゃんじゃ。

助手:助手です。よろしくお願いします。あれ、博士は?

おーちゃん:博士はお寝坊じゃ。お寝坊じゃ。なので、博士が起きるまで、わしが講義するぞ。

助手:はぁ……。それでおーちゃん。今回は何を?

おーちゃん:うむ、今回は、画像を表示する方法を説明するぞ。説明するぞ。

助手:はい。よろしくお願いします、おーちゃん。

[まずは]

おーちゃん:まずは、前回のプロジェクトを開くのじゃ。

助手:はい、既に開いてあります。

おーちゃん:そしたらあらかじめDebugフォルダの下に、適当な画像をコピーして、名前をchara.bmpに変えておくのだ。

助手:はい、できました。

おーちゃん:そしたら、ここから、画像を表示する処理を描いていくことにするぞ。まずは、

Module Module1

の下に、次の一文を書くのだ、書くのだ。

Dim hChara As Integer

おーちゃん:次に、

SetDrawScreen(DX_SCREEN_BACK)

の下に、次の文を書くのだ。

hChara = LoadGraph("chara.bmp")

助手:はい。

おーちゃん:そして最後に、

ClearDrawScreen()

の下に次の文を書くのだ。これでOKじゃ、OKじゃ。

DrawGraph(50, 50, hChara, 0)

助手:はい、できました、おーちゃん。

おーちゃん:では、実行してみるのじゃ。

助手:おぉ! ちゃんと画像が表示されていますよ!

vbdx1807-01.JPG

おーちゃん:うむ。では、これから、この付け足した部分について説明していくぞ。していくぞ。

[LoadGraphとDrawGraph]

博士:ふわぁ……良く寝たわい。

助手:あ、起きてきたんですか、博士。今月はおーちゃんとするから、まだ寝てていいですよ。

博士:そ、それは困るっ。わしの仕事がっ。

助手:それじゃ、これからは寝坊しないようにしてくださいね、博士。

博士:う、うむ……。さて、まずはLoadGraph関数からじゃ。このLoadGraph文は、画像をメモリに読み込む命令じゃ。その際、その画像を表す番号……ハンドルを返り値として渡すようになっておるのじゃ。

助手:ハンドル、ですか?

博士:うむ。画像を表示する関数を使うときには、このハンドルを使って表示させる画像を指定するのじゃ。

助手:なるほど。

博士:あと、かっこの中には、ダブルコーテーションで囲んで、読み込む画像のパスを指定するのじゃ。

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

博士:そして次は、DrawGraph関数じゃ。これは、名前の通り、画像を表示するものじゃ。最初の二つの引数は、画像を表示させる位置を指定している。この位置が、画像の左上に当たるように表示されるのじゃ。つまりこの場合だと、画像の左上が(50, 50)に来るように表示するのじゃ。

助手:プログラム中での表記を見るに……3番目は、表示させる画像のハンドルですか?

博士:うむ、その通りじゃ。さて、DrawGraphは一つだけではなく、何度も実行することができる。その場合、後のDrawGraphで、画面を上書きするので、実行する順番には注意が必要じゃ。

助手:ということは、背景をつけたいときは、背景→キャラクターの順番で実行すればいいわけですね? よーし。

--------------------
Dim hChara As Integer
Dim hBack As Integer

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

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

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

hBack = LoadGraph("back.bmp")
hChara = LoadGraph("chara.bmp")

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

DrawGraph(0, 0, hBack, 0)
DrawGraph(50, 50, hChara, 0)

''フリップ
ScreenFlip()

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

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

助手:よし、実行……と。あれ?

vbdx1807-02.JPG

助手:キャラクターの周囲が黒くなってます。なんでなんでしょう?

博士:うむ、その解決法は、この後説明していくぞよ。

[透過フラグについて]

博士:といっても、その解決法は簡単なのじゃ。

DrawGraph(50, 50, hChara, 0)

の行の四番目の引数。0になっているが、これを1にするだけじゃよ。

助手:なるほど、やってみます。

vbdx1807-03.JPG

助手:お、今度はうまくいきました! もしかしてこの四番目の引数は、背景を透明にするかどうかのフラグなのでは?

博士?:うむ、そのとおりじゃ。これを1にすると、黒になっている部分を透明にしてくれるんじゃよ。

助手:それでは、他の色を透明にしたい場合はどうすれば?

博士?:その方法もちゃんとあるぞよ。LoadGraph関数の前に、この関数を実行すればいいのじゃ、いいのじゃ。

SetTransColor(●, ●, ●)

助手:SetTransColor関数、ですか。

博士?:うむ。三つの引数は、それぞれ、赤、緑、青の色の濃さを表している。そして、これによって設定された色の部分を透明にしてくれるのじゃ。詳しくは、DXライブラリのサイトを見るのじゃ、見るのじゃ。

助手:わかりました。……あれ?

おーちゃん:今日も疲れたわい、疲れたわい。

助手:あ、あれ? おーちゃん? 博士は?

おーちゃん:博士なら、そこに倒れておる。倒れておる。

助手:……。

おーちゃん:次回は、DrawGraph関数のバリエーションを紹介するぞ、紹介するぞ。

※次の更新は、7月19日。レトロゲーレビューの予定です。お楽しみに!
posted by 裏編 at 07:32| Comment(0) | VB.NETでDirectX | このブログの読者になる | 更新情報をチェックする

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 | このブログの読者になる | 更新情報をチェックする