Hi, I want to make a game loop in a nice way, where I can use polymorphism to call the correct Update, draw and HandleInput.
What I am thinking is to have a base class Scene, which will have the virtual functions Update,Draw and HandleInput. I will then create separate classes for each of my games states/Scenes. I.e. Login , options, pause, main game which will inherit from the base Scene class.
What I would want to do is this:
Scene* currentScene;
...GameLoop
currentScene->Update()
currentScene->Draw()
currentScene->Handlenput()
But wouldn't I also have to initialise the other scenes? Such as:
Login login;
Pause pause;
And then to change the currentscene, I will do something such as: currentScene = &login;
This part is fine, the problem lies in where to put the Scene* currentScene variable and all of the other scene variables such that I can switch to any one of the scenes from INSIDE another scene. So say I was in the login scene, and pressing escape inside this scene means I change it to the MainMenu scene, how can I do it so the Login has access to the Mainmenu variable and also the Scene* ?
Sorry if that didn't make much sense.
game loop help c++
Started by dAND3h, Oct 07 2012 01:30 PM
4 replies to this topic
Sponsor:
#2 Moderator* - Reputation: 5387
Posted 07 October 2012 - 01:44 PM
Not if you use (smart) pointers and create (and destroy) the scenes only as needed. Then your Login scene can return a new MainMenu to signify the scene change (or NULL/nullptr if there is no scene change).But wouldn't I also have to initialise the other scenes? Such as:
Login login;
Pause pause;
[ I was ninja'd 71 times before I stopped counting a long time ago ] [ f.k.a. MikeTacular ] [ My Blog ] [ SWFer: Gaplessly looped MP3s in your Flash games ]
#3 Moderators - Reputation: 6645
Posted 07 October 2012 - 01:45 PM
I generally use the run and return successor pattern with state objects like what you call your Scene objects. Basically every function called on a state object returns a smart pointer to the state that the system should be in now. This can be a pointer to the original state. This allows inter-relation of states to happen without whatever is holding the state to explicitly know what's going on. One thread where I talk about this in more detail.
#4 Crossbones+ - Reputation: 5164
Posted 08 October 2012 - 03:20 AM
The method I explained here is basically similar to what you are doing.
Each state (or scene in your case) inherits from a base state CStateBase.
The article provides code for managing these states, creating states based off ID value, and transitioning between states.
Additionally, it is generally a flaw to pass input to a state as an event. Inputs should be buffered and later accessed by the states when it is time for them to perform a logical update. The buffer should have a sequential and time-stamped history of inputs lasting at least 12 seconds long for the average use case.
L. Spiro
Each state (or scene in your case) inherits from a base state CStateBase.
The article provides code for managing these states, creating states based off ID value, and transitioning between states.
Additionally, it is generally a flaw to pass input to a state as an event. Inputs should be buffered and later accessed by the states when it is time for them to perform a logical update. The buffer should have a sequential and time-stamped history of inputs lasting at least 12 seconds long for the average use case.
L. Spiro
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums






