Direct Input Tastatur Problem!!!
-
Yo, oder wenn es nur um 1 Taste geht 'ne boolean reinkladdern.
-
hm. wenn man eine dinput klasse hätte, könnte man 2 arrays nehmen, eins für den alten und eins für den neuen status der tasten. in der abfrage methode füllt man dann ein array mit dem neuen state, davor aber kopiert man dessen inhalt in das andere array. nun macht man die ausgabe des textes davon abhängig, ob der status des entsprechenden keys in beiden arrays gleich ist... muss sicher noch überarbeitet werden, aber im prinzip ginge da (oder??)
sorry, 0x00000001 , falls du dsowas gemeint hattest.
-
Ich verstehe wie ihr das meint, aber hat direct input keine einfachere Lösung,
könnt ihr ein bsp coden, ich weis nicht wie man das umsetzen soll, wie ihr das meint
-
Warum lest ihr nicht einfach die Antworten der Anderen und _denkt_ darüber nach, bevor ihr noch was sagt?
Bye, TGGC (Der Held ist zurück)
-
sorry
-
So, ich hab mir meine gedanken gemacht, aber die umsetzung gelingt mir einfach net
kann nicht bitte einer ein beispiel zum code schreiben, BITTE!!!
mfg
-
bool g_bKeyboard[256] // Globales array, da keine klasse vorhanden ist ZeroMemory(g_bKeyboard, sizeof(bool)) // bin mir nicht sicher, ob man sizeof(bool) oder sizeof (g_bKeyboard) nehmen muss void ProcessInput(void) { // alle Tasten der Tastatur bool bKeyboard[256]; int y = 20; int x = 20; // altes array sichern for (int i = 0; i < 256; i++) { g_bKeyboard[i] = bKeyboard[i]; } if(FAILED(lpDIKeyboard->GetDeviceState(sizeof(bKeyboard),(LPVOID)&bKeyboard))) { // die Tastatur wurde zwischenzeitlich // durch eine andere Anwendung genutzt // Kontrolle wiederholen lpDIKeyboard->Acquire(); return; } HDC hDC = GetDC(hWnd); // die gedrückte Taste ausgeben if(bKeyboard[DIK_LEFT] && !g_bKeyboard[DIK_LEFT]) // prüfen, ob die taste zwischendurch losgelassen wurde, muss natürlich bei allen keyabfragen erfolgen { TextOut(hDC,x,y,"Links ",10); x += 50; } if(bKeyboard[DIK_RIGHT]) { TextOut(hDC,x,y,"Rechts ",10); x += 50; } if(bKeyboard[DIK_UP]) { TextOut(hDC,x,y,"Hoch ",10); x += 50; } if(bKeyboard[DIK_DOWN]) { TextOut(hDC,x,y,"Runter ",10); x += 50; } if(bKeyboard[DIK_SPACE]) { TextOut(hDC,x,y,"Space ",10); x += 50; } if(bKeyboard[DIK_RCONTROL]) { TextOut(hDC,x,y,"Control ",10); x += 50; } for(int i=x;i<250;i++) { TextOut(hDC,i,y," ",1); } ReleaseDC(hWnd,hDC); }
-
Babbo schrieb:
ZeroMemory(g_bKeyboard, sizeof(bool)) // bin mir nicht sicher, ob man sizeof(bool) oder sizeof (g_bKeyboard) nehmen muss
Bei sizeof(bool) müsste man ja noch angeben, wie viele davon...
-
Anstatt das Array dauernd zu kopieren könnte man auch zwei am Anfang erstellen, und die dann jeweils abwechselnd benutzen. Das sollte schneller sein. Am besten man speichert einen pointer der auf das aktuelle Array zeigt und einen der auf das andere zeigt. Die Zeiger kann man dann flippen, ähnlich wie Back und Frontbuffer bei der Grafik.
Nur so als Tipp. Aber ich hab den Eindruck Gott V 2.0 wird schon froh sein wenns überhaupt mal geht...
-
Ja dann wehre ich scht froh
Der Code scheint net zu funzen, dann wen ma drückt blinkt da die schrieft net auf.
Ich weis keinen Rat
-
bin nicht sicher, aber könnte es nicht sein, dass es einfach zu schnell wieder verschwindet (es=der text). Vielleicht versucht du mal eine andere prüfung, z.b. eine variable, die bei jedem tastendruck erhöht wird, und die du dann am edne der funktion auf den screen bringst...
ansonsten wüsste ich nicht, wo der fehler liegt...
-
jo bin auch hintergekommen, der dürchlaüft so schnell die schleife, auf meinem 66 mhz rechner kann man es sehen. Der code an sich is ja auch logisch. Bedanke mich für eure Hilfe.
mfg