XNA Fuchs InputHandler
Introduction:
Each XNA “Game” I program I have to take input, something like the following
KeyboardState prevKeyboardState; protected override void Update(GameTime gameTime) { KeyboardState keyboardState = Keyboard.GetState(); if (keyboardState.IsKeyDown(Keys.Left) && prevKeyboardState.IsKeyUp(Keys.Left)) { // Do stuff } prevKeyboardState = keyboardState; }
I have to create two KeyboardStates, one for this frame & the other is for the previous frame. Then in most cases I check that some button is pressed only in a frame not in its predecessor…( because even if you press a button and remove your finger quickly the, button will be considered pressed in more than one frame )
Same issue goes for the mouse.
So I thought I should create my own input handler, a friend of mine told me “Don’t you think you’re re-inventing the wheel?” well, he was right, almost :D, I’m inventing a wheel that fits my vehicles :D.
FuchsInputHandler.dll
Of course writing an input handler like this one is very easy :D, but my biggest problem was the names to give for the functions :|, can you give me a shorter name for the function IsKeyDownThisFrameButUpThePreviousFrame :D?
Just kidding, no function with that name :D, below is a list containing some of the functions & properties of the static class InputHandler
void Update(GameTime gameTime) : Needs to be called ONCE at the beginning of the Update function of your main game.
Keboard
bool IsKeyPressed(Keys key) : Returns true if the button is down this frame & was up the previous one, false otherwise.
bool IsKeyDown(Keys key) : Returns true if the button is pressed or held down, false otherwise.
Mouse
bool IsMouseLeftPressed() : Returns true if the left mouse button is down this frame & it was up the previous one, false otherwise.
bool IsMouseLeftDown() : Returns true if the left mouse button is pressed or held down, false otherwise.
And there are similar functions for both right & middle mouse buttons
bool IsMouseMiddlePressed()
bool IsMouseMiddleDown()
bool IsMouseRightPressed()
bool IsMouseRightDown()
Vector2 MousePosition : Returns the current mouse position.
Vector2 PrevMousePosition : Returns the position of the mouse in the previous frame.
MouseState MouseState : Returns the current mouse state ( in case you ever need it ).
MouseState PrevMouseState : Returns the mouse state from the previous frame.
Vector2 MouseVelocity : Returns current mouse position minus its position from the previous frame
There are also some delegates named.
onLeftMouseDown
onRightMouseDown
onMiddleMouseDown
onMouseMove
For example if you want to make a sound every mouse click you just put the code for playing the sound in a function then wire the appropriate delegate with that function.
Demo & Source Code:
I wrote a small demo to test the library:
The wheel on the top left rotates with the mouse wheel, the red x is moved by clicking using the left mouse button
Below the red x there’s a counter for the number of clicks, press right mouse button to decrease the counter or press middle mouse button to reset the counter.
The cyan filled arrows will move whenever the arrow keys on the keyboard are pressed, while the red arrows will move once for each button press.
FuchsInputHandler Demo Source Code (VS2010 + XNA4)
FuchsInputHandler dll (.NET4Framework Client Profile)
Final Notes:
I wrote this class for personal use but I thought I should share it, Who knows 🙂 someone might find it useful or improve it.
To be honest I didn’t search for input handlers on the internet, maybe this was a mistake but it’s okay for me.
i needed to add mouse handling functionality to my new project, and remembered this project, which you told me about while back.
thanks for making it. it works like a charm:D
Told you it was a good idea 😀 !