Newsgroup: it.comp.lang.visual-basic
Titolo: Pressione contemporanea di piu' tasti ??

Ciao a tutti, da bravo principiante, sto facendo un giochino
banalissimo di aerei. 
Ho un problema (da bravo principiante) sui tasti che controllano
l'aereo.
Se premo (o tengo premuto) il tasto A l'aereo va dritto, se premo (o
tengo premuto) il tasto l l'aereo va a destra, ma se li premo entrambi
(o li tengo premuti) vorrei che l'aereo andasse in diagonale (cosa che
non accade.....l'aereo rimane fermo...sembra quasi un elicottero...).
Finora ho  usato il key down (ho provato anche con l'operato logico
and Case vbKeyA and vbkeyL) ma non ha funzionato...
Chi mi da un suggerimento ??
Grazie mille.
Ciao, Fabio
Let's just say I was testing the bounds of reality.  
I was curious to see what would happen. 
That's all it was: just curiosity.
-James Douglas Morrison, 1943-1971
*******************
For spammers:
Unsolicited Email "spam" sent to this email address will result in your
system being subscribed to 10,775 Majordomo list servers.
Be forewarned that you will recieve roughly 1 gig of mail per day, or
15,000 messages per hour.
This Email address not for your advertising. You have been warned.
Think before you post!

Secondo me dovresti tenere storia su una variabile (con gli operatori
logici) lo stato dei pulsanti.
Ad esempio, per i quattro pulsanti direzionali:
iPesoAccelerazione = 1  'accelerazione ha peso 1 (2^0)
iPesoArresto = 2  'ha peso 2 (2^1)
iPesoSinistra = 4  'sinistra ha peso 4 (2^2)
iPesoDestra = 8  'destra ha peso 8 (2^3)
eventualmente puoi tener traccia anche dello stato di altri pulsanti dando
un peso diverso (sempre con 2^x)
Quando premi il tasto accelerazione, nell'evento KeyDown, utilizzi la
sintassi
iStatoPulsanti = iStatoPulsanti + iPesoAccelerazione
quando rilasci il tasto accelerazione, nell'evento KeyUp, utilizzi la
sintassi
iStatoPulsanti = iStatoPulsanti - iPesoAccelerazione
Nella routine che gestisce il moto dell'aereo, testi lo stato della
viriabile iStatoPulsanti che può assumere i seguenti valori:
Val    Tasti premuti
---   -------------
0    Nessun tasto
1    Accelerazione (1)
2    Arresto (2)
4    Sinistra (4)
8    Destra (8)
3    Accelerazione + Arresto (1+2)
5    Accelerazione + Sinistra (1+4)
9    Accelerazione + Destra (1+8)
6    Arresto + Sinistra (2+4)
10    Arresto + Destra (2+8)
...
Eventualmente puoi utilizzare l'OCX MsgHook della Mabry che ti permette di
fare il SubClassing e di intercettare qualsiasi messaggio, compresi quelli
della tastiera.
Fabio Alieri ha scritto:



Non puoi fare il codice di gestione del movimento al KeyPress (o simili)
semplicemente perche' questo evento e' legato ad un UNICO tasto o carattere,
mentre tu (ed in genere nei giochi) hai bisogno di reagire anche su una
combinazione di PIU' tasti.
La gestione degli input da tastiera nei giochi per PC e' fatta in modo
totalmente differente.
In VB non potresti farla allo stesso identico modo, ma in linea di massima,
il principio e' questo:
1) si tiene in memoria un array di boolean (uno per ogni carattere ASCII, o
uno per tasto della tastiera, dipende).
2) alla pressione di un tasto (in DOS si usano le Interrupt Service
Routines), il flag relativo nell'array viene settato a True.
3) in modo asincrono (magari usa un timer con intervallo molto basso) il
programma controlla lo stato dei tasti nell'array e agisce di conseguenza.
--
Roal Zanazzi
z...@iol.it