Frage zu meinem Programm



  • Hier erstmal mein Code:

    main.cpp:

    #include <iostream>
    #include "Framework.hpp"
    #include "StateManager.hpp"
    
    int main()
    {
    getchar();
    return 0;
    }
    

    Framework.hpp:

    #ifndef FRAMEWORK_HPP
    #define FRAMEWORK_HPP
    
    #include <SFML\Graphics.hpp>
    #include "StateManager.hpp"
    
    class Framework
    {
    public:
    Framework();
    ~Framework();
    
    void RunApplication();
    
    private:
    
    sf::RenderWindow *mMainWindow;
    sf::Event *mMainEvent;
    sf::Clock *mMainClock;
    StateManager *mMainStateManager;
    
    void Render();
    void Update();
    void HandleEvents();
    void CalculateFrametime();
    
    float mFrameTime;
    
    };
    
    #endif
    

    Framework.cpp:

    #include "Framework.hpp"
    
    Framework::Framework()
    {
    mMainWindow = new sf::RenderWindow(sf::VideoMode(800,600,32),"Moorhun",sf::Style::Default);
    mMainEvent = new sf::Event;
    mMainClock = new sf::Clock;
    mMainClock->restart();
    
    mMainStateManager = new StateManager(mMainWindow,mMainEvent);
    
    }
    
    Framework::~Framework()
    {
    mMainWindow = NULL;
    mMainEvent = NULL;
    
    delete mMainWindow;
    delete mMainEvent;
    }
    
    void Framework::RunApplication()
    {
    while(mMainWindow->isOpen())
    {
    HandleEvents();
    Update();
    Render();
    }
    }
    
    void Framework::Render()
    {
    mMainWindow->clear();
    mMainStateManager->Render();
    mMainWindow->display();
    
    }
    void Framework::Update()
    {
    CalculateFrametime();
    mMainStateManager->Update(mFrameTime);
    }
    void Framework::HandleEvents()
    {
    while (mMainWindow->pollEvent(*mMainEvent))
    {
    if(mMainEvent->type == sf::Event::Closed)
    {
    mMainWindow->close();
    
    mMainStateManager->HandleEvents();
    }
    }
    }
    
    void Framework::CalculateFrametime()
    {
    mFrameTime = static_cast <float> (mMainClock->getElapsedTime().asSeconds());
    mMainClock->restart();
    }
    

    StateManager.hpp:

    #ifndef STATEMANAGER_HPP
    #define STATEMANAGER_HPP
    
    #include <SFML\Graphics.hpp>
    
    class StateManager
    {
    public:
    StateManager(sf::RenderWindow *rw,sf::Event *ev);
    ~StateManager();
    
    void Render();
    void Update(float Frametime);
    void HandleEvents();
    
    void AddSate();
    void SetState();
    
    private:
    sf::RenderWindow *mMainWindow;
    sf::Event *mStateEvent;
    };
    
    #endif
    

    StateManager.cpp:

    #include "StateManager.hpp"
    
    StateManager::StateManager(sf::RenderWindow *rw,sf::Event *ev)
    {
    
    mMainWindow = rw;
    mStateEvent = ev;
    }
    
    StateManager::~StateManager()
    {
    }
    
    void StateManager::Render()
    {
    }
    
    void StateManager::Update(float Frametime)
    {
    }
    void StateManager::HandleEvents()
    {
    }
    
    void StateManager::AddSate()
    {
    }
    void StateManager::SetState()
    {
    }
    

    so nun zu meiner Frage: Was habe ich falsch gemacht, denn bei mir öffnet sich kein "Moorhun.exe"-Fenster sondern nur ein cmd Fenster? Habe ich das falsche Projekt ausgewählt (Leeres Projekt)?



  • Du rufst keinerlei Funktion abseits der Standardfunktion getchar() auf. Wieso sollte sich ein Fenster öffnen? Du meinst vorallem vermute ich das sf::RenderWindow? Dafür müsstest du eben dies erstellen.
    Wie du das machst kannst du im Internet zu haufen finden (die offizielle Homepage hat dazu hinreichend Material parat)





  • Du musst in der mainfunktion die Methode "RunApplication" aufrufen.

    #include <iostream>
    #include "Framework.hpp"
    #include "StateManager.hpp"
    
    int main()
    {
    Framework f;
    f.RunApplication();
    return 0;
    }
    
    Im übrigen rate ich von dem Tutorial ab, da hat scheinbar jemand keine Ahnung vom Programmieren, anders kann ich mir folgende Zeilen nicht erklären:
    
    [code="cpp"]mMainWindow = NULL;
    mMainEvent = NULL;
    
    delete mMainWindow;
    delete mMainEvent;
    


  • Ok.
    Danke für deine Hilfe 🙂


Anmelden zum Antworten