Siv3Dで横スクロールゲームを作る #1 プレイヤーとブロックの配置
Siv3Dはプログラミングだけで簡単かつ直感的に画像を出したり、音楽を鳴らすことができます。しかし、入門チュートリアルはそこで終わっているので、Siv3Dで初めてゲーム制作をする人は画像や音楽を扱えるようになったけど、どうやってゲームを作ればいいかわからないとなるかもしれません。そこで今回は、「Siv3Dで横スクロールゲームを作る」と称し、横スクロールゲームを作ってみようと思います。
作るものは横スクロールゲームですが、真上からの俯瞰視点のゲームならアクションゲームでもRPGでも応用できると思います。また、リソースはSiv3D付属の物を使うので、Siv3Dのインストールさえ終わっていればすぐ始められます。(入門チュートリアルは出来る前提で話を進めますが、、、)
背景の設定
真っ黒い画面だとモチベーションも上がらないのでまずは背景を設定しましょう。デフォルトのウィンドウはゲームをするには小さいので 1280×720 にリサイズします。次にTextureを作り、描画しますが、そのままだと大きさが足りないのでscale関数で大きくします。本来ならばリサイズせずに済むように画像を作るべきです。
Blockクラスの作成
足場となるBlockクラスを作ります。まず、メンバ変数として必要なのはどこに配置されているかを示すRectFと表示する画像を示すTextureになります。RectFの方はコンストラクタで設定できるようにしておきましょう。
次にメンバ関数についてですが、ブロックのようにゲーム内に描画されるオブジェクトは「更新のみを行う関数」と「描画のみを行う関数」を分けましょう。今回はそれぞれをupdate関数, draw関数としました。ブロックは一度設置すると、そのまま更新されることはないのでupdate関数は不要なのですが、今後のことを考えて作っておきましょう。
ブロックの配置
さっき使ったBlockを配置していきます。複数配置したいのでArray(Siv3D版vector)を使用します。update関数とdraw関数のために二回for文を回すのは無駄に見えますが、今後のために面倒でも分けておいてください。
また、backgroundの前にblocksのdraw関数を呼んでしまうと、ブロックが後ろに入って背景しか見えなくなるので描画順に注意してください。
Playerクラスの作成
同様にPlayerクラスも作成しましょう。メンバ変数としてRectFを持ちたいところですが、キャラクターは座標で管理した方が扱いやすいのでVec2をメンバに持たせます。ただの点だと見辛いので点を中心とした円をdraw関数で描画しておきます。update関数内では左右キーの状態によってx座標を変更します。これにより水平方向に移動することができるようになります。
プレイヤーの描画
次にPlayerクラスにもTextureを持たせ描画しますが、ここで一つ注意があります。今までm_positionで指定してきた座標はキャラクターの座標なので、その足元が示されるべきですが、RectFで指定する座標は画像の左上です。なのでそのことを考慮して、横幅と縦幅、m_positionから画像の左上の座標を計算してRectFを作成、draw関数を呼びます。
まとめ
まだ、重力も当たり判定も実装していないので、Siv3D君が宙を平行移動している状態ですが、とりあえず絵面として必要なものは揃いました。次回は重力とジャンプ機能を実装しようと思います。
次回
おまけ
やっていることは単純なのですが、次回以降の下準備もしていたため少々長くなってしまいました。間違ってしまった人は下記を参考にしてみてください。
Siv3D January 2016
Siv3D-kun, ©2015 Siv3D, licensed under a CC BY-NC: http://creativecommons.org/licenses/by-nc/4.0/