class Game {
private:
string title;
bool running;
State currentState;
public:
sf::RenderWindow window;
void setup();
void run();
};
currentStateという変数があります。これは状態です:
#ifndef STATE_HPP
#define STATE_HPP
using namespace std;
class State {
private:
public:
void start();
void update();
void render();
};
#endif
そして、Stateを継承するPlayStateというクラスがあります。
#ifndef PLAY_STATE_HPP
#define PLAY_STATE_HPP
#include <SFML/Graphics.hpp>
#include "Game.hpp"
#include "State.hpp"
using namespace std;
class PlayState : public State {
private:
sf::CircleShape shape;
Game game;
public:
PlayState();
void start();
void update();
void render();
};
#endif
Game.cppで、次のようにしてcurrentStateを作成しています。
currentState = PlayState();
問題は、しかし、それが機能していないということです。currentState.update()はstate.update()です。PlayStateを作成するときに、Stateメソッドをオーバーライドしていないようです。
PlayState.cppは次のとおりです。
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <stdio.h>
#include "PlayState.hpp"
PlayState::PlayState() {
printf("heyyy\n");
}
void PlayState::start() {
shape.setRadius(100.f);
shape.setOrigin(20.0f, 20.0f);
shape.setFillColor(sf::Color::Green);
}
void PlayState::update() {
sf::Event event;
while (game.window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
game.window.close();
//running = false;
}
}
printf("here\n");
}
void PlayState::render() {
printf("here\n");
game.window.clear();
game.window.draw(shape);
game.window.display();
}
これらのメソッドを「オーバーライド」する方法についてのアイデアはありますか?ありがとうございました。
編集 私はState.cpp関数を仮想化して、オーバーライドできるようにする必要がありました。また、State * currentStateをポインターとして定義し、 "currentState = new PlayState();"を使用してPlayStateを作成する必要がありました。また、-> update()と-> draw()を使用して.updateと.drawにアクセスします。