Jump to content

  • Log In with Google      Sign In   
  • Create Account

game loop help c++


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 dAND3h   Members   -  Reputation: 214

Like
0Likes
Like

Posted 07 October 2012 - 01:30 PM

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.

Sponsor:

#2 Cornstalks   Crossbones+   -  Reputation: 6991

Like
0Likes
Like

Posted 07 October 2012 - 01:44 PM

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 new MainMenu to signify the scene change (or NULL/nullptr if there is no scene change).
[ 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 SiCrane   Moderators   -  Reputation: 9662

Like
0Likes
Like

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 L. Spiro   Crossbones+   -  Reputation: 14219

Like
2Likes
Like

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
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
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#5 dAND3h   Members   -  Reputation: 214

Like
0Likes
Like

Posted 09 October 2012 - 01:25 PM

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!




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS