mirror of
https://github.com/italicsjenga/gba.git
synced 2024-12-24 03:11:29 +11:00
more button info
This commit is contained in:
parent
7d8c82ddbc
commit
ce3b871728
|
@ -63,6 +63,23 @@ the whole frame. If you've worked with polling input before that should sound
|
||||||
totally normal, but if not just always remember to gather the input once per
|
totally normal, but if not just always remember to gather the input once per
|
||||||
frame and then use that value across the whole frame.
|
frame and then use that value across the whole frame.
|
||||||
|
|
||||||
|
### Detecting New Presses
|
||||||
|
|
||||||
|
The keypad only tells you what's _currently_ pressed, but if you want to check
|
||||||
|
what's _newly_ pressed it's not too much harder.
|
||||||
|
|
||||||
|
All that you do is store the last frame's keys and compare them to the current
|
||||||
|
keys with an `XOR`. In the `gba` crate it's called `KeyInput::difference`. Once
|
||||||
|
you've got the difference between last frame and this frame, you know what
|
||||||
|
changes happened.
|
||||||
|
|
||||||
|
* If something is in the difference and _not pressed_ in the last frame, that
|
||||||
|
means it was newly pressed.
|
||||||
|
* If something is in the difference and _pressed_ in the last frame that means
|
||||||
|
it was newly released.
|
||||||
|
* If something is not in the difference then there's no change between last
|
||||||
|
frame and this frame.
|
||||||
|
|
||||||
## Key Interrupt Control
|
## Key Interrupt Control
|
||||||
|
|
||||||
* KEYCNT, `0x400_0132`, `u16`, read/write
|
* KEYCNT, `0x400_0132`, `u16`, read/write
|
||||||
|
|
|
@ -85,7 +85,7 @@ pub fn display_control() -> DisplayControlSetting {
|
||||||
/// If the `VCOUNT` register reads equal to or above this then you're in vblank.
|
/// If the `VCOUNT` register reads equal to or above this then you're in vblank.
|
||||||
pub const VBLANK_SCANLINE: u16 = 160;
|
pub const VBLANK_SCANLINE: u16 = 160;
|
||||||
|
|
||||||
/// Vertical Counter (LY).
|
/// Vertical Counter (LY). Read only.
|
||||||
///
|
///
|
||||||
/// Gives the current scanline that the display controller is working on. If
|
/// Gives the current scanline that the display controller is working on. If
|
||||||
/// this is at or above the `VBLANK_SCANLINE` value then the display controller
|
/// this is at or above the `VBLANK_SCANLINE` value then the display controller
|
||||||
|
|
Loading…
Reference in a new issue