同サイトの第5章( https://dixq.net/rp2/05.html )にて以下のようなシーンを変更するメゾットがあるのですが、引数のstackClearがtrueのときはSOMESceneインスタンスが1回全てクリアされます。
// Looper.cpp
void Looper::onSceneChanged(const eScene scene, const Parameter& parameter, const bool stackClear)
{
if (stackClear) {//スタッククリアなら
while (!_sceneStack.empty()) {//スタックを全部ポップする(スタックを空にする)
_sceneStack.pop();
}
}
switch (scene) {
case Title:
_sceneStack.push(make_shared<TitleScene>(this, parameter));
break;
case Game:
_sceneStack.push(make_shared<GameScene>(this, parameter));
break;
default:
//どうしようもないエラー発生
break;
}
}
void TitleScene::update()
{
if (CheckHitKey(KEY_INPUT_E)) {
Parameter parameter;
parameter.set(GameScene::ParameterTagLevel, Define::eLevel::Easy);
const bool stackClear = false;
_implSceneChanged->onSceneChanged(eScene::Game, parameter, stackClear);
return;
}
if (CheckHitKey(KEY_INPUT_N)) {
Parameter parameter;
parameter.set(GameScene::ParameterTagLevel, Define::eLevel::Normal);
const bool stackClear = false;
_implSceneChanged->onSceneChanged(eScene::Game, parameter, stackClear);
return;
}
}
このようにインスタンスがクリアされた後にそのインスタンスのreturn文を実行する場合は問題がないのでしょうか?
また、シーンを一つ戻すような動作をさせるメゾットをonSceneChangedと同じように作ることを考えています。
この場合Looperクラスにて_sceneStack.pop()を一度行えばいいと思うのですがいかがでしょうか?