DirectInput: Ich bekomm die Kriese....
-
ich möchte doch nur das sie in dem einen frame wo die Taste losgelassen wird true zurück liefert!
Das muss doch irgendwie gehen! Bei anderen spielen wird das doch 100% auch so gemacht, oder?
-
Du prüfst ja auch nur, wie der vorherige Zustand war, wenn die Taste derzeit gedrückt ist. Du müsstest deine Bedingung aber so formulieren, dass du im Falle, dass die Taste ist nicht gedrückt ist prüfst, ob sie dies im Frame zuvor war
-
ja aber wie macht man das?!?! Könntet ihr mir bitte bitte etwas Psoido-code geben?
Ich bin mit meinem Latein total am ende
-
Bin mir net sicher, aber probiers mal so:
this->m_oldKeyBuffer = m_KeyBuffer; // oder wie kopiert man das komplett? :confused: if (!(this->m_KeyBuffer[DIK_CODE] & 0x80) && (this->m_oldKeyBuffer[DIK_CODE] & 0x80)) { return true; } else return false;
Ist nicht ausprobiert, aber irgendwie so in der Art
-
will net
-
Hast du zum Kopieren des Array mal memcpy probiert?
Ansonsten zum Ausprobieren einfach 2 x GetDeviceState aufrufen
Wie genau sieht denn das "will net" aus?
-
"will net" sieht so aus: es passiert gar nix
memcopy hab ich grad auch ausprobiert, und will auch net
-
Uops, das mit this->m_oldKeyBuffer = m_KeyBuffer; bzw. memcpy muss natürlich hinter dem if-Block stehten, also probier mal das hier:
if (!(this->m_KeyBuffer[DIK_CODE] & 0x80) && (this->m_oldKeyBuffer[DIK_CODE] & 0x80)) { ret_val = true; } else ret_val = false; this->m_oldKeyBuffer = m_KeyBuffer; // oder memcpy, bin grad net sicher return ret_val;
[ Dieser Beitrag wurde am 23.02.2003 um 16:49 Uhr von flenders editiert. ]
-
was ist ret_val?
-
Hi,
ich habs jetzt mal so nach deinem Beispiel gemacht:
bool CInput::IsKeyUp (int DIK_CODE) { CLog *p_Protokoll; p_Protokoll = CLog::getInstance (); if(FAILED(this->m_Keyboard->GetDeviceState(sizeof(this->m_KeyBuffer), (LPVOID)&this->m_KeyBuffer))) { p_Protokoll->writeText ("DirectInput : ERROR : Konnte die Tastatur nicht abfragen.\n"); return (false); } if (!(this->m_KeyBuffer[DIK_CODE] & 0x80) && (this->m_oldKeyBuffer[DIK_CODE] & 0x80)) { return (true); } else { return (false); } // this->m_oldKeyBuffer = m_KeyBuffer; // oder memcpy, bin grad net sicher memcpy (this->m_oldKeyBuffer, this->m_KeyBuffer, 256); return (false); }
funzt net *schnief* :(:(
-
Hab meinen Code von vorhin nochmals korigiert! ret_val ist eine Variable vom Typ bool. Ich habe sie eingeführt, um das Problem vom deinem Code zu lösen: Durch deine return s wird memcpy nie aufgerufen D.h. du musst den Aufruf von memcpy vor return im if-else Block aufrufen, oder eben eine Hilfsvariable einführen
-
[ Dieser Beitrag wurde am 23.02.2003 um 17:12 Uhr von Ikari editiert. ]