Skip to content

07 シーンを切り替える ​

自作シーンを作る ​

ここからは画像やマップの読み込みを使わない独立した実習です。ProjectName/code/Scene/Lesson.ixxを作り、プロジェクトへ登録します。

cpp
module;
#include <DxLib.h>
export module Scene.Lesson;
import Scene.SceneBase;
import MyLib.KeyStatus;

export namespace scene {
class Lesson final : public SceneBase {
public:
    void Init() override {}
    SceneCmd Update() override {
        if (input::KeyStatus::CheckKey(keyType.R, ON_PRESS)) return CmdPop{};
        return std::monostate{};
    }
    void Draw() override {
        DrawString(100, 100, "Lesson: press R to return", GetColor(255, 255, 255));
    }
};
}

タイトルから積む ​

Title.cppへimport Scene.Lesson;を追加します。Title::Update()の冒頭へ次を追加すると、Spaceからこのシーンへ入れます。既存のStartボタンの処理は残します。

cpp
if (input::KeyStatus::CheckKey(keyType.SPACE, ON_PRESS)) {
    return scene::CmdPush{ []() { return std::make_shared<scene::Lesson>(); } };
}

CmdPushは下のTitleを保持し、Lessonを上に積みます。RのCmdPopでTitleへ戻れます。これは必ずPushで入る前提です。唯一のシーンをPopすると次のフレームに空のスタックへアクセスするため、終了にはCmdQuitを使ってください。

確認する ​

タイトルでSpace → Lesson表示 → Rで元のタイトル、を確認します。シーンはフレーム終端で切り替わり、構築後にInit()が呼ばれます。下のシーンが自動で更新・描画されるわけではありません。

画像やMapを作るシーンでは読み込みの完了を待つ必要があります。既存Title→LoadingScene→Playの経路を参考にし、特にMapをLoadingContextなしで生成しないでください。

次:小さなゲーム · 参照:Scene API

コード確認基準:08f9fa53 · C++実機検証は別途実施