C# OpenTKで壁よけゲームをつくる

で作成した壁よけゲームは見た目がイマイチなので改良します。

OpenTKでオブジェクトを真後ろから追いかけるような描画をする

で自機を真後ろから追いかけるような描画をすることもできるようになったので、これも取り入れてみましょう。

自機が板では味気ないので、前のページで作成したサイコロをつかってみましょう。サイコロは飛行中、ランダムに回転します。

自機は平行移動するのではなく、進行方向を変更させます。自機には角度がつくため壁は目の前に垂直に立っているのではなく斜めにみえます。

まず自機を描画するクラスに変更を加えます。

Draw(float x, float y, float z, int rx, int ry, int rz)メソッドでサイコロを描画します。このときサイコロをX軸、Y軸、Z軸を中心に回転させます。回転速度を同じにすると見えない目があるので回転速度にばらつきを持たせています。

DrawDice(double size)メソッドで描画処理をおこないます。このとき各目を描画するためにテクスチャが必要です。テクスチャは1回つくってしまえばそれを再利用することができるので、はじめてDrawDice(double size)メソッドが呼び出されたときにだけテクスチャを作成しています。

すでにテクスチャが作成されている場合は描画処理をおこないます。

テクスチャが作成されていない場合はCreateTexture(Bitmap bmp)メソッドでテクスチャを作成します。引数のBitmapは1から6までの目のイメージです。

Form1クラス内で自機の位置、進行方向を管理するプロパティを示します。前回はここでglControl.Refresh()メソッドを呼び出していたのですが、ここで呼び出すのはやめてTimer.Tickイベントを捕捉したときにおこなうことにします。

Timer.Tickイベントが発生したらどのキーが押されているのかを調べて、方向転換をします。方向転換が無制限にできてしまうと壁よけゲームとして成り立たなくなるので、進行方向として設定できるのは上下左右いずれも30度とします。

そのあと自機を進行方向にむかって前進させた場合の自機の座標を求めて描画処理をおこないます。

描画処理をするときに視界の設定が必要です。これはOpenTKでオブジェクトを真後ろから追いかけるような描画をするとほとんど同じです。

最後に描画処理を示します。これは最初に作成したC# OpenTKで壁よけゲームをつくると変わりません。

まだまだゲームとしては不満な点が残ります。これからも改良していきます。