Jump to content
  • Advertisement


This topic is now archived and is closed to further replies.


Simple input question...

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

The input on the current platform that I am learning to program on (GBA) is stored in a 16bit register (only uses 9 bits to correspond to each button). Ok. So the bit is either on or off. This is fine for checking if a button is currently being pressed. But I want to have another 16bit variable that just trackes when a button was first pressed. This means that a bit would only be on during the first frame of it being pressed. For example: ------------------ frame 1: GBAInput: 0000000000000000 JustPressed: 0000000000000000 ------------------ frame 2: GBAInput: 0000000010000000 JustPressed: 0000000010000000 ------------------ frame 3: GBAInput: 0000000010000000 JustPressed: 0000000000000000 ------------------ frame 4: GBAInput: 0000000010000000 JustPressed: 0000000000000000 ------------------ I know this is possible, but how do I do it? I was thinking of using another 16bit variable to store the previous frames gba input, and then XOR it with the current input to give me my justPressed input, but i''m not sure if that would work. Any suggestions?

Share this post

Link to post
Share on other sites
You''re on the right track with the XOR, but there is a small problem that has to be sorted out. Using XOR with the state of the last frame''s input and the current frames input will give you flags for all buttons that HAVE CHANGED , not just the presses but the releases also.

This can be solved using an additional bitwise operation. If the last state was zero, then the current state MUST be 1 for a button press. In that case, just use the & operator with the current state and the has changed value, ie

hasChanged = lastState ^ currentState;
wasPressed = hasChanged & currentState;


/* The current input state of the buttons */
u16 g_CurrentInputState = 0x0000;

/* The input state of the buttons on the last frame */
u16 g_JustPressedState = 0x0000;

/* Function to update the input */

void UpdateInput(void)
u16 LastInputState = g_CurrentInputState;
g_JustPressedState = g_CurrentInputState &(g_CurrentInputState ^ LastInputState);

Share this post

Link to post
Share on other sites

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!