Entwickler-Ecke
Sonstiges (Delphi) - Problem beim Ansteuern der Tastatur
DTK_FJM - Mo 08.09.08 10:48
Titel: Problem beim Ansteuern der Tastatur
Hallo Leute!
Da wir neu hier im Forum sind, stellen wir uns an dieser Stelle erst einmal vor:
"wir" sind 3 Leute aus dem 13er Info-Kurs eines Gymnasiums.
Nun, da laut Kurikulum Projektarbeit ansteht, und wir uns dazu entschieden haben ein Spiel zu programmieren, in dem 2 Schlangen gegeneinander antreten, die sich nach Möglichkeit nicht berühren dürfen (ähnlich dem Spiel "Achtung die Kurve"), stehen wir vor folgendem Problem: die Schlangen lassen sich partout nicht über die Tastatur und auch nicht über die Maus ansteuern. Beide reagieren in keinster Weise auf Eingaben jeglicher Art. Das Spielfeld ist die Form.
Da wir uns der Einfachheit halber dazu entschieden haben, die Schlangensteuerung über mSuM laufen zu lassen, lacht uns bitte nicht aus^^
Hier der Quellcode der Tastatursteuerung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| mT=Tastatur S1, S2= Schlangen mBr=Unit zur Positionsüberprüfung etc.
procedure TForm1.Timer1Timer(Sender: TObject); begin S1.move; S2.move;
if mT.wurdeGedrueckt then begin case mT.zeichen of 'a':S1.goLeft; 's':S1.goRight; Pfeillinks:S2.goLeft; Pfeilunten:S2.goRight; end; mT.weiter; end;
mBr.savePosition; mBr.crash; end; |
Für Hilfe wären wir euch sehr dankbar!
Grüße: Dennis, Thomas, Konstantin
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Miri - Mo 08.09.08 11:06
Die Tasten in einem Timer abzufangen, ist nicht die sinnvollste Lösung, zumal man beim Drücken dann exakt den Moment treffen müsste, in dem der Timer feuert.
Besser sind hierfür die Events
ONKEYPRESS oder
ONKEYDOWN.
Hidden - Mo 08.09.08 12:04
Hi,
Hier handelt es sich mal wieder um mSuM-Geschädigte :roll:
Die Klasse Tastatur kapselt das OnKreyPress-Event und speichert die letzte gedrückte Taste in einem Buffer. Die Anweisung 'meineTastatur.Weiter löscht den Buffer; die Klasse ist so ausgelegt, dass sie sonst crasht(:shock:), mit der Fehlermeldung 'Schwerer Bedienungsfehler beim Umgang mit der Tastatur!' :lol: .
Summa Summarum ein erfolgreicher Schritt in der Bewegung weg von ereignisorientierter Programmierung und hin zu pseudo-besserer, deutscher Benennung.
Gut, diese 'Pädagogen' haben ihr Fett weg, jetzt können wir :lol:
So spontan sehe ich da keinen Fehler; ich überlege gerade, ob es irgendwie möglich ist, mT so zu initialisieren, dass sie weder eine Fehlermeldung abwirft, noch das OnKeyress-Event der Form bekommt.
Am besten ist es wohl, ihr stellt mehr Quelltext hoch. Im Zweifelsfall den ganzen Projektordner ohne .Exe als .zip.
mfG,
Yogu - Mo 08.09.08 15:27
Ich übersetzt mal deinen Code ins "Normaldelphi"...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| S1.move; S2.move;
if GetAsyncKeystate(Ord('a')) < 0 then S1.goLeft; if GetAsyncKeystate(Ord('s')) < 0 then S1.goRight; if GetAsyncKeystate(VK_LEFT) < 0 then S2.goLeft; if GetAsyncKeystate(VK_RIGHT) < 0 then S2.goRight;
mBr.savePosition; mBr.crash; |
Ist ein klein bisschen einfacher, oder? Und du brauchst nicht einmal irgendeine Unit oder ein Objekt oder...
baka0815 - Mo 08.09.08 15:51
Ich würde das ganze einfach mal debuggen.
Liefert if mT.wurdeGedrueckt then überhaupt true?
Hidden - Mo 08.09.08 16:39
Jop. Aber ehe wir jetzt die Benutzung des Debuggers durchgehen.. :mrgreen:
baka0815 - Mo 08.09.08 17:12
Breakpoint mit F5 auf die Zeile, Programm starten, Taste drücken und warten bis der Timer zuschlägt. Dann einfach gucken ob das if überhaupt greift - fertig. :)
DTK_FJM - Do 11.09.08 12:53
Hey Leute, danke für die vielen Antworten! Der Tip von Yogu hat funktioniert!
Jetzt müssen wir uns ersteinmal darum kümmern, die Wegpunkte vernünftig speichern und abfragen zu können! Wir sprechen uns also garantiert noch einmal^^
Bis dann!
*closed*
Hidden - Do 11.09.08 14:05
Hi,
Yugos Vorschlag war nur zum Verständnis seitens mSuM-Fremder hier im Forum. Wenn ihr es so macht, wird das euer Lehrer glaub' ich nicht so sehr mögen ;)
Wenn ich bedenke, dass ich für den Begriff 'Canvas' in einem Nebensatz 20 Minuten zur Schnecke gemacht wurde.. :lol:
Postet mal mehr Quelltext, dann kann ich euch sicher sagen, was bei der Verwendung des Tastatur-Objektes schief geht.
mfG,
Yogu - Do 11.09.08 16:03
Hidden hat folgendes geschrieben: |
| Yugos Vorschlag war nur zum Verständnis seitens mSuM-Fremder hier im Forum. Wenn ihr es so macht, wird das euer Lehrer glaub' ich nicht so sehr mögen |
1. Ich heiße Yogu, und nicht Yugo. :roll:
(Bist aber nicht der erste, der meinen Namen falsch schreibt...)
2. Als ich diesen Beitrag verfasste, wusste ich noch nichts von mSuM. Ich nahm also an, dass es sich dabei um irgendeine Komponente handelt, die so gut wie kein Mensch kennt und eigentlich sinnlos ist.
Meiner Meinung nach ist der Zugriff auf die Tastatur mit
GetAsyncKeystate wunderbar einfach und benötigt keine weiteren Hilfsmittel. Wenn ihr aber mit mSuM arbeitet, ist euer Lehrer in diesem Punkt sicherlich anderer Meinung. ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!