| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Dec 2002
Beiträge: 14
|
Hallo, ich habe folgendes Problem: Für eine Spielsteuerung sollen gleichzeitig zwei Paddels bewegt werden können. Pro Paddel gibt es 2 Tasten (für "hoch" und "runter"). onKeyDown wird der entsprechende Paddel in die entsprechende Richtung bewegt, onKeyUp wird er gestoppt. Das funktioniert auch auf den ersten Blick. Wenn ich nun aber erst eine Taste gedrückt halte, dann eine weitere Taste gedrückt halte und am Ende erst die erste Taste loslasse und dann erst die zweite, läuft der Paddel für die erste Taste weiter. D.h. für mich, sobald ich zusätzlich eine zweite Taste drücke, springt der Fokus des Listeners auf diese Taste und ein onKeyUp wird für die erste Taste nicht mehr registriert! Was kann ich machen, um dieses Problem zu verhindern? Zu meinem Code: Ich habe einen Keylistener. (Vielleicht liegt da das Problem? Wüsste aber nicht, wie ich es anders machen soll.) PHP-Code: ? Hat jemand eine Idee ? |
| | |
| | #2 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
Ich hab für sowas mal ne Klasse geschrieben, die man als Ersatz für die Key-Klasse verwenden kann. Diese leitet die Events der Key Klasse einfach weiter, behebt aber das Problem das du beschrieben hast, indem sie für jede Taste, die gedrückt wird, ein Intervall startet, das regelmäßig mit Key.isDown überprüft, ob die Taste noch gedrückt ist, und gegebenenfalls das entsprechende onkeyUp-Event schmeißt.
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #4 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
Das meinte ich zwar nicht, aber wenn es in deinem Fall funktioniert ... ![]() Aber irgendwie verstehe ich nicht, wie dann bei dir gleichzeitig mehrere Tasten abgefragt werden sollen, schließlich macht ja dann jeder neue Tastendruck alle vorherigen wieder platt, oder nicht?
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Dec 2002
Beiträge: 14
|
Deshalb auch der Umweg über this.paddel_1.up = true etc. als Schalter. Die eigentliche Bewegung wird an anderer Stelle onEnterFrame ausgeführt. Klingt nach keiner eleganten Lösung, aber was besseres habe ich nicht hinbekommen. Ein anderer Gedanke war auch der - mehrere separate Tasten erfordern evt. mehrere Listener - und habe einfach mehrere Listener eingebaut . Das hat aber nichts gebracht.
|
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Dec 2002
Beiträge: 14
|
Die sieht jetzt so aus: PHP-Code: |
| | |
| | #8 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
OK, gute Lösung. Im Flash-Player 7 wirst du allerdings nimmernoch den Bug haben, dass bei fogender Tastendruck Reihenfolge der erste Tastendruck nie aufgelöst wird: Code: A drücken UP drücken DOWN drücken DOWN loslassen UP loslassen A loslassen (das hier wird nicht mehr bei dir ankommen)
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #9 (permalink) |
| Neuer User Registriert seit: Dec 2002
Beiträge: 14
|
Da hast du völlig recht - und das nicht erst seit dem letzten Posting! (Frag mich, was ich hier die ganze Zeit mache? Testen kann man das wohl nicht nennen! )Ich konnte wirklich immer nur eine Taste benutzen. Habe dann in meiner else-Anweisungen noch Key.isDown bemüht: PHP-Code: Habe am Anfang angenommen, dass der Listener sich einfach immer auf den neuen Key "konzentriert" und man ihn daran "erinnern" muss, dass da noch ein anderer war. Das scheint ja auch wirklich so zu sein. Das Problem kommt, wenn der neueste Key losgelassen wurde und man sich für das Erinnern des Listener einen anderen Weg suchen muss. Ich stehe also wieder ganz am Anfang. Habe mir nochmal dein erstes Posting durchgelesen und werde das jetzt versuchen. Dank dir für deine Geduld! Geändert von jotox (10-06-2007 um 10:37 Uhr) |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Dec 2002
Beiträge: 14
|
Das mit der Klasse und setInterval habe ich für s erste nicht hinbekommen. Meine Aternativlösung: Ich habe die else-Anweisungen wieder rausgenommen und rufe jetzt onEnterFrame eine Funktion auf, die bei allen 4 Tasten auf !Key.isDown reagiert. setInterval wäre sicherlich besser gewesen, aber soweit funktionierts jetzt erstmal. Vielleicht kannst du ja deine Lösung auch nochmal posten - für den Lerneffekt. Dank dir auf jeden Fall! Geändert von jotox (10-06-2007 um 11:31 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |