• Advertisement
Sign in to follow this  

game loop help c++

This topic is 1932 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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.

Share this post


Link to post
Share on other sites
Advertisement

But wouldn't I also have to initialise the other scenes? Such as:
Login login;
Pause pause;

Not if you use (smart) pointers and create (and destroy) the scenes only as needed. Then your Login scene can return a [font=courier new,courier,monospace]new MainMenu[/font] to signify the scene change (or [font=courier new,courier,monospace]NULL[/font]/[font=courier new,courier,monospace]nullptr[/font] if there is no scene change).

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
Thanks for the replies everyone. I ended up doing something very similar to L. Spiro's method. Although I am now looking into smart pointers as I had not heard of them before, so thanks for that research topic!

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement