見出し画像

【ゲーム制作】『Cube』をつくったはなし#3

もなこさんです。
前回は開発環境について紹介しました。

今回こそプログラム面でのおはなしになります。
プログラム面といっても作り方の流れや結果になります。
個人的な苦労話が多めかも
何回かに分けて紹介しますので最後までお付き合いください!

ボックスを表示する

まずはボックスを表示させないと何もできません。
モデルを表示させたい。しかしモデルができてない。
そんな時に便利なのがDirectX Tool Kit
DirectX Tool Kitの機能に仮3Dモデルがあり、実際に使用したいモデルが完成していなくても制作を進められます。

モデルを表示する

DirectXtk(略した)にあるGeometricPrimitiveを使用します。
GeometricPrimitiveの中でも立方体のモデルである『Cube』を使用します。
GeometricPrimitiveのモデルには様々な種類があります。
詳しくはこちらをご覧ください。

GeometricPrimitiveを初期化して、ワールドやビューといった行列を設定します。
するとモデルが表示できました。

複数表示する

ボックスが1つだけ表示できてもゲームになりません。
3×3×3の形にボックスを表示させなければなりません。
複数出すにも描画処理で座標だけ変えて同じプログラムを書くのは面倒どころかとてつもなく良くない。プログラムが長くなったり、可読性が良くない。やさしいせかいどこ

複数出すために配列にします。
今後のことも考えて3次元配列にしたいです先生!

「Vectorの中にVector、その中にVectorを入れると3次元になります」

何ですかその呪文。
私の背後に宇宙背負った猫がいますよ

つまりこういうことですか
vector<vector<vector<要素の型>>> v;

なんだこれは(vectorです)
なんだこれは(多次元配列です)
アクセスとかどうしろと(v[i][j][k]でできるでしょ)

よし、1次元配列にしよう。
3次元の挑戦はゲームがある程度作り終わってからにしよう。

ということで1次元配列で管理します(良くない)
とりあえず3つ出せればいいよね
ということでこうなりました。

大きさは1なので座標を✚1.0してずらしていくとできるのでは?
その結果がくっついて直方体になっちゃった…
3つ分出ているのか分からないので調整…

3つ出てるけど原点基準に出しているのでそこも調整して画面の中心になるようさらに調整…

なかなかいいのでは?
これで複数出す方法が分かりました。
3×3×3もこれでできるね!

ボックスを動かす

表示が出来たら次にやることは動かすこと。
動かしたいボックスをマウスでクリックすると空いている場所に移動するようにプログラムを組みます。

空いている場所の指定

まず、移動する場所を確保するために3つのボックスのうち一つを消します。
消すのは簡単。
配列の消したいところをresetします。

真ん中のボックスを消しました。
この空いたスペースにボックスが動けばよし。

マウスとの判定

クリックを検知するためにマウスを設定…
待ってくれ、マウスカーソルは2軸(スクリーン)座標、ボックスは3軸(ワールド)座標、判定どうするや‼‼先生‼‼‼‼

「君にこれを授けよう」

ということで、マウスレイのサンプルプログラムをもらいました。
「まあ、後日の授業で使うやつだけどね」
先生??

マウスレイをレイに見立てたカプセルとして代用。
ボックスのコライダーもカプセルとして、カプセルの衝突判定を使用しています。
毎フレームレイを飛ばしているのでボックスが回転しても判定できます。

マウスとの判定ができているか分かりやすくするためにボックスに色をつけてみました。

判定できてますね。
あとはクリックした後に空いている場所へ移動してくれたら基本的な動きは大丈夫です。

移動する

クリックしたら移動できるようにします。
移動はスライドしたように見せるために、線形補間を使います。

空いている場所を移動後の位置と設定して1秒でその場所に行くようにしています。
もちろん隣が空いている場所かのチェックがされているはず!
これで大丈夫なのでは…

今回はここまでです。
実はこの状態だと恐ろしい問題が残っているんですが…
それでは次回会いましょう~

この記事が気に入ったらサポートをしてみませんか?