Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

cojo2015

Alter Hase

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

31

21.11.2015, 18:30

Hä, aber jetzt steht doch das App.clear/App.display ein zweites mal, oder?

Nein. Meine Main sieht wie folgt aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    Game game;

    HWND hwnd = FindWindow("ConsoleWindowClass", NULL);
    ShowWindow(hwnd, SW_HIDE);

    game.changeState(Game::gameState::MAINMENU);    // Das Spiel startet im Hauptmenü
    game.Run();

    return 0;
}


Und Game::Run() sieht so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Game::Run()
{
    sf::Clock clock;
    sf::Time timeSinceLastUpdate = sf::Time::Zero;

    while (App.isOpen())
    {
        ProcessEvents();
        Update(timeSinceLastUpdate);
        UpdateStatistics(timeSinceLastUpdate);
        Render();

        sf::Time waitTime = TimePerFrame - timeSinceLastUpdate;
        sf::sleep(waitTime);

        timeSinceLastUpdate = clock.restart();
    }
}

32

21.11.2015, 18:33

Ich denke Ich verstehe.

Also im Main wird der Run ausgeführt.
Im Run wird dann das mit Window ausgeführt?

cojo2015

Alter Hase

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

33

21.11.2015, 18:33

Im Run wird dann das mit Window ausgeführt?

Ja, also die Render-Methode, die ich schon vorher gezeigt hatte.

34

21.11.2015, 18:37

Gut werde das mal probieren wenn ich mehr Zeit habe.
Denke aber das es hinhauen wird, also verstanden hätte ichs.
Danke an alle die mir geholfen haben, vor allem die cojo2015.
Danke. :thumbup:

35

21.11.2015, 18:44

Sorry eine letzte Frage noch:
Wie und wo rufst du zBsp die HelpState auf?

cojo2015

Alter Hase

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

36

21.11.2015, 18:47

Wie und wo rufst du zBsp die HelpState auf?

Wenn du im Hauptmenü auf den Button "Hilfe" klickst. Wie? Na so:

C-/C++-Quelltext

1
2
3
    // Hilfe?
    else if (mHelpButton->onClick(game))
        game.changeState(Game::gameState::HELP);

37

21.11.2015, 19:17

Ok werd das mal probieren und dann Code schicken.

38

22.11.2015, 13:38

Komm nicht weiter!
Es kommt eine Fehlermeldung: undefined reference to ChangeState::Changestate

Hier der Code:
main.cpp

C-/C++-Quelltext

1
2
3
4
5
6
#include"ChangeState.hpp"
int main(void){
        sf::RenderWindow *mWindow = new sf::RenderWindow(sf::VideoMode(800,600,32),"Bios the Virus",sf::Style::Titlebar);   sf::Event        *mEvent  = new sf::Event       ();
        ChangeState ChState;
    ChState.Run(mWindow, mEvent);
        return 0;}



ChangeState.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#ifndef CHANGESTATE_HPP_INCLUDED
#define CHANGESTATE_HPP_INCLUDED
#include<iostream>#include<SFML/Graphics.hpp>
class ChangeState{public:     ChangeState(); ~ChangeState();
    //Run function  void Run(sf::RenderWindow *w, sf::Event *ev);

private:
 virtual void Render     (sf::RenderWindow *w);  virtual void HandleEvent(sf::Event        *ev);  virtual void Update     ();


};
#endif // CHANGESTATE_HPP_INCLUDED



ChangeState.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#include"ChangeState.hpp"
void ChangeState::Render     (sf::RenderWindow *w){
    w->clear();    w->display();}void ChangeState::HandleEvent(sf::Event        *ev){
}void ChangeState::Update     (){
}
void ChangeState::Run        (sf::RenderWindow *w, sf::Event *ev){
    while(w->isOpen()){
        while(w->pollEvent(*ev)){            HandleEvent(ev);        }        Update();        Render(w);    }}

39

22.11.2015, 13:58

Ok hab den Fehler gefunden.

Jetzt verstehe ich aber wirklich nichts mehr:

main.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include"menue.hpp"
#include"ChangeState.hpp"

int main(void){

sf::RenderWindow *mWindow = new sf::RenderWindow(sf::VideoMode(800,600,32),"Bios the Virus",sf::Style::Titlebar);
sf::Event *mEvent = new sf::Event ();

menue menu;

ChangeState *ChState = &menu;

ChState->Run(mWindow, mEvent);

return 0;
}

Changestate.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef CHANGESTATE_HPP_INCLUDED
#define CHANGESTATE_HPP_INCLUDED

#include<iostream>
#include<SFML/Graphics.hpp>

class ChangeState{
public:
ChangeState();
~ChangeState();
//Run function
void Run(sf::RenderWindow *w, sf::Event *ev);


private:


virtual void Render ()=0;
virtual void HandleEvent()=0;
virtual void Update ()=0;



};

#endif // CHANGESTATE_HPP_INCLUDED

Changestate.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include"ChangeState.hpp"

ChangeState::ChangeState(){

}

ChangeState::~ChangeState(){

}

menue.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifndef MENUE_HPP_INCLUDED
#define MENUE_HPP_INCLUDED

#include<SFML/Graphics.hpp>
#include<iostream>
#include<cstdlib>

#include"ChangeState.hpp"

class menue : public ChangeState{
public:
menue();
~menue();
//Run function
void Run(sf::RenderWindow *w, sf::Event *ev);


private:


void Render (sf::RenderWindow *w);
void HandleEvent(sf::Event *ev, sf::RenderWindow *w);
void Update ();
};


#endif // MENUE_HPP_INCLUDED

menue.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include"menue.hpp"

menue::menue(){

}

void menue::Render (sf::RenderWindow *w){

w->clear();
w->display();
}

void menue::HandleEvent(sf::Event *ev, sf::RenderWindow *w){

if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
w->close();

}

void menue::Update (){

}

void menue::Run (sf::RenderWindow *w, sf::Event *ev){

while(w->isOpen()){

while(w->pollEvent(*ev)){
HandleEvent(ev, w);

}
Update();
Render(w);
}
}

menue::~menue(){

}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »gamepro2105« (22.11.2015, 18:27)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

40

22.11.2015, 14:10

1. Ich sehe keine Frage bzw. Problembeschreibung.
2. Bitte Code richtig formatieren.

Werbeanzeige