2016-04-26 7 views
0

Ich habe Problem mit Anzeigebild (Ich habe versucht Motor von SDL neu zu schreiben 2,0 bis SFML; Motor heruntergeladen: http://gamedevgeek.com/tutorials/managing-game-states-in-c/ )Versuchen Sie Engine von SDL in SFML umzuschreiben, falscher Bereich von sf :: RenderWindow?

Ich habe Problem mit besonders, dass ein Teil des Codes, der in introstate.cpp ist.

Das Programm kompiliert und erstellen Fenster (nur für eine Sekunde) und verschwindet dann ohne Reaktion und nicht irgendetwas machen (es sollte Bild anzuzeigen).

Ich denke, es hat mit einer Reichweite von Objekt sf :: RenderWindow MarioClone zu tun. Ich meine, es wurde in wenigen Headern deklariert und in verschiedenen Methoden verwendet, daher denke ich, dass es Missverständnisse gibt, wenn man auf das spezifische Fenster zeigt, das erstellt wird. Sollte ich "extern" keyword irgendwo oder was verwenden?

Ich lasse Link zu GitHub, weil Code in vielen Dateien und sogar eine Datei, die eine Menge Code enthält, und will nicht, es kleben hier (es wäre schwer zu lesen sein). https://github.com/shahar23/MarioClone (Und ja - der Code vorherige Original SDL hat kommentiert leicht zu verstehen, was stattdessen in Methoden gesetzt werden soll)

Antwort

0

In Ihrer gameengine.cpp Datei in Ihrer init Methode erstellen Sie ein lokalen Variable der Derselbe Name wie die in Ihrer Header-Datei deklarierte Variable. Das ist nicht was du willst. Sie möchten die vorhandene Variable ändern:

void CGameEngine::Init(const char* title, int width, int height, bool fullscreen) 
{ 
    // This line creates a NEW LOCAL variable of the same name. 
    // Your instance level variable remains unchanged: 
    // sf::RenderWindow MarioClone(sf::VideoMode(width, height), title, sf::Style::Default); 

    // instead, change your class level variable: 
    MarioClone.create(sf::VideoMode(width, height), title, sf::Style::Default); 
+0

Ja, aber dann kompiliert es nicht. Es liegt daran, dass introstate.cpp dieses Objekt (RenderWindow MarioClone) ebenfalls verwendet und es dort nicht deklariert ist (es sieht keine Instanz, die in CGameEngine :: Init erzeugt wird). – Pawel

+0

'MarioClone' in introstate.cpp muss' Spiel-> MarioClone' sein. Aber das ist Basic C++ und hat nichts mit SFML oder SDL zu tun. – nvoigt