Ich habe ein Panel, welches den Spieler darstellt. Dies ist nicht sichbar. Darauf lege ich ein Image mit dem Spieler.
Um den Spieler zu bewegen verändere ich den Wert left und top.
Hier der Quelltext des Sprungs:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var j : integer;
Gegend_Datei : File of TGegend;
Gegend : TGegend;
hoch : boolean;
begin
///////hochspringen///////////
if i <= Sprunghoehe // Sprunghöhe ist derzeitig bei 30
then
begin
AssignFile(Gegend_Datei,'GegendDatei.dat'); { GegendDatei umfasst alle Objekte mit dem der Spieler kolidieren kann}
Reset(Gegend_Datei);
hoch:= true;
for j:=1 to AnzahlPanels do
begin
Read(Gegend_Datei,Gegend);
if (Gegend.Left <= Panel1.Left + Panel1.Width ) and (Gegend.Left + Gegend.Widht >= Panel1.Left)
then
if (Panel1.Top >=Gegend.Top + Gegend.Height - 3) and (Panel1.Top <= Gegend.Top + Gegend.Height +3)
then hoch := false;
end;
if hoch = true
then
begin
Panel1.Top:= Panel1.Top - 2;
if Form1.VertScrollBar.Position > 6 then
Form1.VertScrollBar.Position:=Form1.VertScrollBar.Position-2; // Bildausschnitt bewegt sich mit Figur mit
Inc(i);
end;
if hoch = false then i:=Sprunghoehe + 1;
CloseFile(Gegend_Datei);
end;
///////Kollisionsabfrage///////////
AssignFile(Gegend_Datei,'GegendDatei.dat');
Reset(Gegend_Datei);
for j:=1 to AnzahlPanels do
begin
Read(Gegend_Datei,Gegend);
if (Gegend.Left + Gegend.Widht >= Panel1.Left ) and (Gegend.Left < Panel1.Left + Panel1.Width)
then
if (Panel1.Top + Panel1.Height <= Gegend.Top +3) and (Panel1.Top + Panel1.Height >= Gegend.Top-3)
then
begin
if h = true then i:=0;
if h = false
then
begin
timer1.Enabled:=false;
if i>=450 then showmessage('TOT'); // Spieler stirbt ab bestimmter Falltiefe
i:=0;
end;
end;
end;
CloseFile(Gegend_Datei);
///////Herunterfallen///////////
if i > Sprunghoehe
then
begin
if Form1.VertScrollBar.Position <> 1800 then
Form1.VertScrollBar.Position:=Form1.VertScrollBar.Position+2; // Bildausschnitt bewegt sich mit Figur mit
Panel1.Top:= Panel1.Top + 2;
Inc(i);
if i>=250
then
begin
showmessage('TOT');
i:=0;
timer1.Enabled:=false;
end;
end;
end;
procedure TForm1.Timer3Timer(Sender: TObject);
begin
Image15.Left:=Panel1.Left;
Image15.Top:=Panel1.Top;
end;
Timer1 läuft im Intervall von 1ms
Timer3 setzt das Image im Intervall von 10ms immer wieder auf das Panel.
DoubleBuffered ist auf true
die Variable hoch wird auf false gesetzt, wenn der Spieler nur herunterfallen soll und nicht zuvor hochspringen
die Variable h wird auf true gesetzt wenn man die Sprungtaste (Space) drückt
wenn diese losgelassen wird, dann ist h = false
Es ist mir auch aufgefallen, dass es stärker flackert, wenn sich die Spielfigur wieder nach unten bewegt