0

だから私は本当にクリーンなコードと優れた構成のゲームを作りたかったのです。ゲームの状態を調べると、次のサイトが見つかりました: http://gamedevgeek.com/tutorials/managing-game-states-in-c/

彼のテンプレートを使用して、私はこれまでのところこれを持っています:

GameState.hpp

#ifndef Rect_Game_GameState_hpp
#define Rect_Game_GameState_hpp

#include <SFML/Graphics.hpp>
#include "GameEngine.hpp"

class GameEngine;

class GameState {

public:
    virtual void Init() = 0;
    virtual void Cleanup() = 0;

    virtual void Pause() = 0;
    virtual void Resume() = 0;

    virtual void HandleEvents(GameEngine* game) = 0;
    virtual void Update(GameEngine* game) = 0;
    virtual void Draw(GameEngine* game) = 0;

    virtual void ChangeState(GameEngine* game, GameState* state);

private: 
    GameState() { }
};

#endif

TitleScreenState.hpp

#ifdef Rect_Game_TitleScreenState_hpp
#def Rect_Game_TitleScreenState_hpp

#include <iostream>
#include <SFML/Graphics.hpp>
#include "GameState.hpp"
#include "GameEngine.hpp"

class TitleScreenState : public GameState {

public:
    void Init();
    void Cleanup();

    void Pause();
    void Resume();

    void HandleEvents(GameEngine* engine);
    void Update(GameEngine* engine);
    void Draw(GameEngine* engine);

    void ChangeState(GameEngine* engine, GameState* state);

    static TitleScreenState* Instance();

private:

    TitleScreenState() {}

    static TitleScreenState* titleScreenInstance;

    sf::RenderWindow* window;

    int mouseX;
    int mouseY;

    Button* playButton;

};

#endif

そして、関数を実装しようとするたびに、「宣言されていない識別子 'TitleScreenState'の使用」というエラーが表示されます。「TitleScreenState」もオートコンプリートではありません。助言がありますか?

TitleScreenState.cpp

#include <iostream>
#include "GameEngine.hpp"
#include "GameState.hpp"
#include "TitleScreenState.hpp"
#include "ResourcePath.hpp"



void TitleScreenState::Init()
{
    // Initialize values
    leftClick = false;
    mouseX = 0;
    mouseY = 0;

    // Load title screen image
    sf::Texture titleImage;
    if (!titleImage.loadFromFile(resourcePath() + "TitleScreen.png"))
        printf("could not load TitleScreen.png");

    sf::Sprite titleScreen;
    titleScreen.setTexture(titleImage);

    playButton = new Button("Play", 350, 220);

}
4

2 に答える 2

1

ここでの問題は、TitleScreenState.hpp です。

#ifdef Rect_Game_TitleScreenState_hpp
#def Rect_Game_TitleScreenState_hpp

まず、が定義されていない#ifdefため、コンパイラがファイルの残りの部分を認識できなくなります。Rect_Game_TitleScreenState_hppしたがって、だったはず#ifndefです。さらに、 である#def必要があります#define。これで問題は解決するはずです。

于 2012-06-30T19:24:35.667 に答える
0

私はしばらくc++に触れていませんでしたが、デフォルトのコンストラクターがプライベートであると宣言したようです:

private:
   TitleScreenState() {}

私が間違っていなければ、これは実行できないことを意味します:

void TitleScreenState::Init()

インスタンス化する必要があるのは非静的関数であり、デフォルトのコントローラーはプライベートです:S。したがって、エラーを発生させるパブリックが事実上ないため、TitleScreenStateどこでもそのエラーが発生します。new TitleScreenState()TitleScreenStateUse of undeclared identifier 'TitleScreenState'

あなたはそれを公開しようとしましたか?

public:
   TitleScreenState() {}
于 2012-06-30T19:19:31.027 に答える