25/05/14 17:20
lupodenis
Come da titolo il mio problema si riferisce alla gestione degli input da tastiera, prima di porvi la domanda vi spiego qual'è l'obiettivo, a che punto sono arrivato e qual'è il problema.
Obiettivo: Controllare una macchinetta radiocomandata con un programmino scritto in c#, quindi utilizzando i tasti W, S, A, D devo fare in modo che la macchinetta si sposti in avanti o indietro e giri a sinistra o a destra, precisamente il programma deve fare questo: mentre tengo premuto il tasto W la macchinetta deve procedere avanti, quando rilascio il tasto W la macchinetta si deve fermare, stessa cosa per il tasto S tranne che la macchinetta deve procedere indietro. Se invece tengo premuto il tasto A le ruote della macchinetta devono girare verso sinistra e rimanere in quella posizione finchè non rilascio il tasto A, stessa cosa per il tasto D. Ora la parte complicata, MENTRE tengo premuto il tasto W quindi la macchinetta procede avanti, se premo il tasto A o D le ruote devono girare verso la direzione che corrisponde al tasto, quando rilascio A o D le ruote devono tornare nella loro posizione iniziale, in pratica mentre la macchinetta corre deve girare a destra e a sinistra.
Stato attuale del programma: Dopo varie ricerche in rete ho trovato il modo per gestire l'input da tastiera con KeyPress e KeyUp, ecco il codice che ho scritto per provare, in pratica mentre è premuto il tasto W il numero all'interno della textbox vieni incrementato, quando W viene rilasciato li numero torna a 0, quindi se tengo premuto S il numero viene decrementato se rilascio S il numero si azzera, invece se premo A o D nella textbox vengono scritte tante A o D.
Problema: Mentre tengo premuto il tasto W, il numero viene incrementato(la macchinetta va avanti) se premo il tasto A o D il numero si ferma e non viene più incrementato e nella textbox vengono scritte le A o D, quando rilascio il tasto premuto A o D ma tengo ancora premuto il tasto W il numero della text box viene azzerato come se nessun tasto sia premuto, in pratica mentre la macchinetta corre avanti quando premo A per girare a sinistra la macchinetta si ferma e le ruote girano a sinistra quindi quando rilascio A le ruote tornano nella posizione iniziale e la macchinetta sta ferma. Capisco che alla fine questo è normale ma sapete se è possibile aggirare questo problema? Nei giochi con le macchine funziona, cioè mentre la macchina corre avanti(tasto W premuto) se premo A la macchina corre e gira, c'è un modo di risolvere il problema con XNA? Non l'ho mai utilizzato e adesso sto effettuando delle ricerche. Grazie per l'attenzione e per la pazienza nel leggere questo poema, spero di esser stato chiaro
Obiettivo: Controllare una macchinetta radiocomandata con un programmino scritto in c#, quindi utilizzando i tasti W, S, A, D devo fare in modo che la macchinetta si sposti in avanti o indietro e giri a sinistra o a destra, precisamente il programma deve fare questo: mentre tengo premuto il tasto W la macchinetta deve procedere avanti, quando rilascio il tasto W la macchinetta si deve fermare, stessa cosa per il tasto S tranne che la macchinetta deve procedere indietro. Se invece tengo premuto il tasto A le ruote della macchinetta devono girare verso sinistra e rimanere in quella posizione finchè non rilascio il tasto A, stessa cosa per il tasto D. Ora la parte complicata, MENTRE tengo premuto il tasto W quindi la macchinetta procede avanti, se premo il tasto A o D le ruote devono girare verso la direzione che corrisponde al tasto, quando rilascio A o D le ruote devono tornare nella loro posizione iniziale, in pratica mentre la macchinetta corre deve girare a destra e a sinistra.
Stato attuale del programma: Dopo varie ricerche in rete ho trovato il modo per gestire l'input da tastiera con KeyPress e KeyUp, ecco il codice che ho scritto per provare, in pratica mentre è premuto il tasto W il numero all'interno della textbox vieni incrementato, quando W viene rilasciato li numero torna a 0, quindi se tengo premuto S il numero viene decrementato se rilascio S il numero si azzera, invece se premo A o D nella textbox vengono scritte tante A o D.
int i = 0; private void textBox_KeyPress(object sender, KeyPressEventArgs e) { switch (e.KeyChar) { case (char)119: { i++; e.Handled = true; textBox1.Text = i.ToString(); }break; case (char)115: { i--; e.Handled = true; textBox1.Text = i.ToString(); }break; case (char)97: { // }break; case (char)100: { // }break; } } private void textBox_KeyUp(object sender, KeyEventArgs e) { i = 0; textBox.Text = "0"; }
Problema: Mentre tengo premuto il tasto W, il numero viene incrementato(la macchinetta va avanti) se premo il tasto A o D il numero si ferma e non viene più incrementato e nella textbox vengono scritte le A o D, quando rilascio il tasto premuto A o D ma tengo ancora premuto il tasto W il numero della text box viene azzerato come se nessun tasto sia premuto, in pratica mentre la macchinetta corre avanti quando premo A per girare a sinistra la macchinetta si ferma e le ruote girano a sinistra quindi quando rilascio A le ruote tornano nella posizione iniziale e la macchinetta sta ferma. Capisco che alla fine questo è normale ma sapete se è possibile aggirare questo problema? Nei giochi con le macchine funziona, cioè mentre la macchina corre avanti(tasto W premuto) se premo A la macchina corre e gira, c'è un modo di risolvere il problema con XNA? Non l'ho mai utilizzato e adesso sto effettuando delle ricerche. Grazie per l'attenzione e per la pazienza nel leggere questo poema, spero di esser stato chiaro
Ultima modifica effettuata da lupodenis 25/05/14 17:28
aaa