とりあえず、グローバルとしてほしいのはゲームステートの皆さん
今のところ、TITLE,PLAY,CLEARを設定しておこうかな。
ところでenumの使い方はもう慣れたよね?
ゲームのシーケンス(場面転換などの流れ)を制御する関数と、各場面(以下シーン)を描画する描画関数のプロトタイプ宣言。
各Update関数はゲームステートを変更するので、&引数(参照渡し)で引数にしておく
Listing. 3: gameSequence.cppの中身
- gameSequence.cpp
#include "globals.h"
#include "gameSequence.h"
void UpdateTitle(GAME_STATE& _state)
{
if (MouseL.down())
{
_state = GAME_STATE::PLAY;
}
}
void DrawTitle()
{
Scene::SetBackground(Palette::Black);
FontAsset(U"font")(U"TITLE_SCENE").drawAt(Scene::Center());
}
void UpdatePlay(GAME_STATE& _state)
{
if (MouseL.down())
{
_state = GAME_STATE::CLEAR;
}
}
void DrawPlay()
{
Scene::SetBackground(Palette::Black);
FontAsset(U"font")(U"PLAY_SCENE").drawAt(Scene::Center());
}
void UpdateClear(GAME_STATE& _state)
{
if (MouseL.down())
{
_state = GAME_STATE::TITLE;
}
}
void DrawClear()
{
Scene::SetBackground(Palette::Black);
FontAsset(U"font")(U"CLEAR_SCENE").drawAt(Scene::Center());
}
各アップデート関数では、キー入力やクリック入力の受付と座標や移動の更新などを行う。
各ドロー関数では、描画処理のみを行う
Listing. 4: Main.cppの中身
- Main.cpp
# include <Siv3D.hpp> // OpenSiv3D v0.6.10
#include "globals.h"
#include "gameSequence.h"
GAME_STATE gState = GAME_STATE::TITLE;
void Main()
{
//自由に拡大縮小できるフォント
FontAsset::Register(U"font", FontMethod::MSDF, 30, Typeface::Regular);
while (System::Update())
{
switch (gState) {
case GAME_STATE::TITLE:
タイトルのアップデート
タイトルの描画
break;
case GAME_STATE::PLAY:
プレイ画面のアップデート
プレイ画面の描画
break;
case GAME_STATE::CLEAR:
クリア画面のアップデート
プレイ画面の描画
break;
default:
break;
}
}
}
Mainはもういいよね?書いてみよう。
実行結果も前にやった通りなので省略ね。
その2 画像読み込み へ