Non c'è molto da dire su questo argomento, poichè XNA comprende già tutto il necessario. Sono poche le cose che mancano, come la funzione che indica se il tasto è stato cliccato e rilasciato di seguito (normale Click di un tasto). Ad ogni modo è sempre buona cosa integrare tutto in una classe che ci fà tutto (anche questa funzione) e, magari, aggiungere anche altre funzioni. Ecco la classe:
La classe si chiama "InputSystem" e permette di sapere le cose principali. Ho implementanto anche le funzioni per i click dei tasti. E' necessario creare un' istanza di questa classe dentro Game1 e ad ogni Update (funzione Update (GameTime gameTime) di Game1): è necessario richiamare il metodo update di questa classe.
Using System; using System. Collections. Generic; using System. Linq; using System. Text; using Microsoft. Xna. Framework. Input; namespace RPG_Example. GameEngine { // Tasti del mouse enum MouseButton { SINISTRO = 0, CENTRO, DESTRO } class InputSystem { /* Servono 2 State per la tastiera e 2 State per il mouse: * (Con State mi riferisco a KeyboardState per la tastiera e MouseState per il mouse) * Uno per lo stato corrente e l'altro per il vecchio stato * Senza troppe spiegazioni: ci serve per sapere se un tasto è cliccato */ KeyboardState keyState; KeyboardState vecchioKeyState; MouseState mouseState; MouseState vecchiomouseState; // Aggiornamento da richiamare ad ogni ciclo public void update () { // Aggiorna la tastiera if (keyState = = null) { vecchioKeyState = Keyboard. GetState (); } else { vecchioKeyState = keyState; } keyState = Keyboard. GetState (); // Aggiorna il mouse if (mouseState = = null) { vecchiomouseState = Mouse. GetState (); } else { vecchiomouseState = mouseState; } mouseState = Mouse. GetState (); } // Tastiera public bool TastoCliccato (Keys tasto) { return keyState. IsKeyDown (tasto) && vecchioKeyState. IsKeyUp (tasto); } public bool TastoPremuto (Keys tasto) { return keyState. IsKeyDown (tasto); } public bool TastoNonPremuto (Keys tasto) { return keyState. IsKeyUp (tasto); } // Mouse public bool MouseClick (MouseButton tasto) { switch (tasto) { case MouseButton. SINISTRO: return ((vecchiomouseState. LeftButton = = ButtonState. Released) && (mouseState. LeftButton = = ButtonState. Pressed)); case MouseButton. CENTRO: return ((vecchiomouseState. MiddleButton = = ButtonState. Released) && (mouseState. MiddleButton = = ButtonState. Pressed)); case MouseButton. DESTRO: return ((vecchiomouseState. RightButton = = ButtonState. Released) && (mouseState. RightButton = = ButtonState. Pressed)); } return false; } public bool MousePremuto (MouseButton tasto) { switch (tasto) { case MouseButton. SINISTRO: return (mouseState. LeftButton = = ButtonState. Pressed); case MouseButton. CENTRO: return (mouseState. MiddleButton = = ButtonState. Pressed); case MouseButton. DESTRO: return (mouseState. RightButton = = ButtonState. Pressed); } return false; } public bool MouseNonPremuto (MouseButton tasto) { switch (tasto) { case MouseButton. SINISTRO: return (mouseState. LeftButton = = ButtonState. Released); case MouseButton. CENTRO: return (mouseState. MiddleButton = = ButtonState. Released); case MouseButton. DESTRO: return (mouseState. RightButton = = ButtonState. Released); } return false; } public int MouseX { get { return mouseState. X; } } public int MouseY { get { return mouseState. Y; } } } }
Dentro "Game1" dichiariamo:
InputSystem inputSystem;
Dentro "protected override void Update (GameTime gameTime) " di "Game1" inseriamo come prima riga