前回は「弾がうまく発射できない」というトピックで質問させていただきました。
今回はタイトルにもあるようにメニュー画面の実装について助力をいただきたいと思い質問させていただきます。
MenuScene.h
#pragma once
#include "AbstractScene.h"
class MenuScene : public AbstractScene
{
public:
MenuScene(IOnSceneChangedListener* impl, const Parameter& parameter);
virtual ~MenuScene() = default;
void update() override;
void draw() const override;
};
MenuScene.cpp
#include "MenuScene.h"
#include "Pad.h"
#include "Keyboard.h"
#include <DxLib.h>
MenuScene::MenuScene(IOnSceneChangedListener* impl, const Parameter& parameter) : AbstractScene(impl, parameter)
{
}
void MenuScene::update()
{
if (Keyboard::getIns()->getPressingCount(KEY_INPUT_ESCAPE)) {
Parameter parameter;
const bool stackClear = false;
_implSceneChanged->onSceneChanged(eScene::Game, parameter, stackClear);
return;
}
}
void MenuScene::draw() const
{
DrawString(100, 100, "メニュー画面", GetColor(255, 255, 255));
}
GameScene.cpp
#include "GameScene.h"
#include <DxLib.h>
#include "Macro.h"
#include "Background01Spell.h"
#include "Keyboard.h"
#include "Pad.h"
using namespace std;
const char* GameScene::ParameterTagStage = "ParameterTagStage"; //パラメータのタグ「ステージ」
const char* GameScene::ParameterTagLevel = "ParameterTagLevel"; //パラメータのタグ「レベル」
GameScene::GameScene(IOnSceneChangedListener* impl, const Parameter& parameter) : AbstractScene(impl, parameter)
{
_backgroundSpell = make_shared<Background01spell>();
_player = make_shared<Player>();
_playerbullet = make_shared<PlayerBulletCollection>(); //共有されているクラスはPlayerBulletCollectionであることに注意
_playeroption = make_shared<PlayerOptionCollection>(); //共有されているクラスはPlayerOptionCollectionであることに注意
_board = make_shared<Board>();
}
void GameScene::update()
{
if (Keyboard::getIns()->getPressingCount(KEY_INPUT_ESCAPE) == 1) {
Parameter parameter;
const bool stackClear = true;
_implSceneChanged->onSceneChanged(eScene::Menu, parameter, stackClear);
return;
}
_backgroundSpell->update();
_playerbullet->update();
_playeroption->update();
_player->update();
_board->update();
}
void GameScene::draw() const
{
_backgroundSpell->draw();
_playerbullet->draw();
_playeroption->draw();
_player->draw();
_board->draw();
}
また、MenuScene.cppでEscキーを押したらゲーム画面に戻るようにしてあります。(MenuScene::update()参照)
実際にデバッグしてみると、一瞬メニュー画面に移るのですが、すぐにゲーム画面に戻ってしまいました。
試行錯誤の末、シーン転換のトリガーに同じEscキーを使っていることが原因であることがわかりましたが、キーを押し続けてもシーンが移らないようにできないでしょうか。(もう一回押すことで処理が行われる様にしたい)
さらに、メニュー画面からゲーム画面に戻ると最初の場面に戻ってしまいます。
これを最初の場面に戻らずメニュー画面に移った時の場面に戻るようにしたく、アドバイスをお願いします。