• Advertisement
Sign in to follow this  

Processing game input

This topic is 1975 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

So my basic 2d game framework in SlimDX is going well. I've created a custom Sprite object, and have some rudimentary mastery of rendering sprites. I just need to move them now.

I have a basic game loop set up, which is based on an old C# game prorgramming book. Having set up all the graphics device bits and bobs, and drawn my sprite on screen, I enter a method in my Game class called Run(). This has the following content:
[source lang="csharp"] public void Run()
{

while( this.Created )
{
// Process one frame of the game
ProcessFrame();
Render();
// Handle all events
Application.DoEvents();
}
}[/source]
ProcessFrame() is supposed to have all the game logic in it, in response to events. Whilst I have a simple event handler (based on an override of OnKeyDown) set up to detect keypresses, I'm wondering how to collect keypresses such that I can process the responses to them in the ProcessFrame() method.

Some initial research on this subject suggests creating a HashSet<Keys>. I've never done this before, so I'm not sure how I would go about it.

There are probably many ways to do this, so I thought I'd see what people would recommend before jumping right in there. tongue.png

Share this post


Link to post
Share on other sites
Advertisement
You would have to store the input state of the input device and pass that to ProcessFrame. Have a look at XNAs GamepadState and KeyboardState structures they are a good example of what you want to do. They also present a fairly nice interface towards gamepads and keyboards.

The best thing to do is to only capture the input state once per update and do all you update logic with that state. The next step to take is to write keybindings so you are never checking hard coded keys or buttons, but you check against actions which the user can then define the associated button for. Edited by NightCreature83

Share this post


Link to post
Share on other sites
Thanks for the speedy reponse NC! I've been checking out this tutorial: http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Keyboard_input.php

This uses the KeyboardState structure as you suggest, and would give me an easy way to update sprite locations etc upon keypresses. I think I would have a ProcessKeyboard() method in the while loop of the Run() method - which might mean I wouldn't need ProcessFrame(), since all I'm doing is processing responses to keypresses, and nothing complicated - for now.

Share this post


Link to post
Share on other sites
As mentioned, a good way is to pull current state from the input devices once per frame and do logic based on that. However, usually only current state is not enough, for example if you are reading raw input or analog values from gamepad. Here, keeping an input state from previous frame(s) with time stamps can help a lot. Based on previous states one can determine how the value changed (slow vs fast) you can even manually catch double clicks (press).

Share this post


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

  • Advertisement