Wir brauchen zu nächst bestimmte Ereignisse:
- FormKeyDown
- FormKeyUp
- x OnTimer (x = Anzahl der Richtungen/Tasten)
Logisch gesehen müsst ihr folgendes konstruieren:
In FormKeyDown soll die jeweilige Taste einen Timer auslösen. Dieser Timer hat ein Intervall von 1 und soll die jeweilige Position des zu steuernden Objekts ändern.
Mit FormKeyUp soll nun der jeweilige Timer wieder gestoppt werden.
Beispiel
In dem folgenden Beispiel sieht man eine kleine Steuerung eines Objekts namens Schiff durch die vier Richtungstasten mit Hilfe von vier Timern(tup; tdown; tleft; tright):
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
vk_right: tright.enabled:=true;
vk_left: tleft.enabled:=true;
vk_up: tup.enabled:=true;
vk_down: tdown.enabled:=true;
end;
end; //der Prozedur
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
vk_right: tright.enabled:=false;
vk_left: tleft.enabled:=false;
vk_up: tup.enabled:=false;
vk_down: tdown.enabled:=false;
end;
end; //der Prozedur
//Das gelb untermalte sind die virtuellen Tastencodes. Sie stehen
//für die Richtungstasten, der Tastatur.
//Weitere Tastaturcodes findet ihr rechts --------------------->
procedure TForm1.tupTimer(Sender: TObject);
begin
schiff.top:=schiff.top-2;
end; //der Prozedur
procedure TForm1.trightTimer(Sender: TObject);
begin
schiff.left:=schiff.left+4;
end; //der Prozedur
procedure TForm1.tleftTimer(Sender: TObject);
begin
schiff.left:=schiff.left-4;
end; //der Prozedur
procedure TForm1.tdownTimer(Sender: TObject);
begin
schiff.top:=schiff.top+2;
end; //der Prozedur
Warum der Umstand mit den Timern?
Ganz einfach:
Nur durch diesen Umweg wird gewährleistet, dass das Objekt sich auch absolut flüssig bewegt. Probiert es doch mal ohne Timer, dann werdet ihr sehn was da rauskommt.
Tip:
Timer sind eure besten Freunde ;-) …zumindest wenn es um Programmieren von Spielen geht
von Artur Bullert |