Я не знаю, имеет ли свой заголовок вопрос о том, что заранее извиняюсь за это. Итак ... я пытаюсь реализовать машину состояния для небольшой игры, которую я пытаюсь сделать, используя C ++ и SFML.
У меня есть gameloopobject абстрактный класс, который нуждается в аргументе renderwindow и имеет эти виртуальные методы: Update , рисовать , gangeinput and reseste . /> Тогда у меня есть гейместат абстрактный класс, который наследует от GameloopObject , но не добавляет ничего нового, поэтому он в основном такой же, как GameloopObject , на данный момент. Игровые блюда. Я бы предпочел оставить их пустыми (если это возможно в C ++), так как объекты Gamestate < /code> хранятся внутри них сразу после создания объекта GameStateManager < /code>.GameStateManager(sf::RenderWindow & w) :
GameLoopObject(w),
currentState(new GameState(w)),
nextState(new GameState(w));
< /code>
, который дает мне «нет конструктора по умолчанию для класса» для класса «gameloopobject» »< /p>
Это остальная часть моего кода: < /p>
/*
* GameStateManager.hpp
*/
#ifndef GameStateManager_HPP
#define GameStateManager_HPP
#include "stdafx.h"
#include "GameLoopObject.hpp"
#include "GameState.hpp"
#include
#include
class GameStateManager : GameLoopObject {
private:
GameState currentState;
GameState nextState;
public:
std::map gameStates{}; // list where all known gamestates are stored.
// methods
GameStateManager(sf::RenderWindow & w);
void AddGameState(std::string name, GameState * state);
void SetNext(std::string name);
void SwitchState();
void HandleInput();
void Update();
void Draw();
void Reset();
};
#endif //GameStateManager_HPP
/*
* GameStateManager.cpp
*/
#include "stdafx.h"
#include "GameStateManager.hpp"
GameStateManager::GameStateManager(sf::RenderWindow & w)
// : GameLoopObject(w)
{
GameState currentState(w);
GameState nextState(w);
}
void GameStateManager::AddGameState(std::string name, GameState * state)
{
gameStates.insert(std::make_pair(name, * state));
}
void GameStateManager::SetNext(std::string name)
{
//check if user wants to exit (close window with X)
if (gameStates.count(name))
{
nextState = gameStates[name];
}
}
void GameStateManager::SwitchState()
{
if (currentState != nextState)
{
currentState = nextState;
}
}
void GameStateManager::HandleInput()
{
// if(currentState != null)
currentState.HandleInput();
}
void GameStateManager::Update()
{
// if(currentState != null)
currentState.Update();
}
void GameStateManager::Draw()
{
// if(currentState != null)
currentState.Draw();
}
void GameStateManager::Reset()
{
// if(currentState != null)
currentState.Reset();
}
Подробнее здесь: https://stackoverflow.com/questions/483 ... ect-syntax
C ++ State Machine, унаследованный класс со значениями элементов с неправильным синтаксисом ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение