Delphi-Quellcode:
//Auszug aus Timer1 (der regelt bei mir alles)
//Kollision Spieler und Gegner
For k:= low(gegner) to high(gegner) do
begin
if ((IsCollision(Gegner[k].BoundsRect, Spieler.BoundsRect)) and (Gegner[k].Cooldown<=0))Then
begin
Spieler.Verletzbar:=False;
If Herzen>=2 then
begin
Herzen:=Herzen-1;
If ((Herzen=4) and (Spieler.Verletzbar=True)) Then
begin
Spieler.Verletzbar:=False;
Abwarten2.Enabled:=True;
Herz5.picture.loadfromfile(Pfad+'\Datein\Herz_Leer.jpg');
end;
If ((Herzen=3) and (Spieler.Verletzbar=True)) Then
begin
Spieler.Verletzbar:=False;
Abwarten2.Enabled:=True;
Herz5.picture.loadfromfile(Pfad+'\Datein\Herz_Leer.jpg');
Herz4.picture.loadfromfile(Pfad+'\Datein\Herz_Leer.jpg');
end;
If ((Herzen=2) and (Spieler.Verletzbar=True)) Then
begin
Spieler.Verletzbar:=False;
Abwarten2.Enabled:=True;
Herz5.picture.loadfromfile(Pfad+'\Datein\Herz_Leer.jpg');
Herz4.picture.loadfromfile(Pfad+'\Datein\Herz_Leer.jpg');
Herz3.picture.loadfromfile(Pfad+'\Datein\Herz_Leer.jpg');
end;
If ((Herzen=1) and (Spieler.Verletzbar=True)) Then
begin
Spieler.Verletzbar:=False;
Abwarten2.Enabled:=True;
Herz5.picture.loadfromfile(Pfad+'\Datein\Herz_Leer.jpg');
Herz4.picture.loadfromfile(Pfad+'\Datein\Herz_Leer.jpg');
Herz3.picture.loadfromfile(Pfad+'\Datein\Herz_Leer.jpg');
Herz2.picture.loadfromfile(Pfad+'\Datein\Herz_Leer.jpg');
end;
end;
If Herzen<=1 then
begin
Verloren;
Herz1.Picture.LoadFromFile(Pfad+'\Datein\Herz_leer.jpg');
end;
end;
end;
...
procedure TForm1.Abwarten2Timer(Sender: TObject);
begin
Spieler.Verletzbar:=True;
Abwarten2.Enabled:=false;
end;
Es gibt insgesammt 5 Herzen (leben). Immer wenn der Spieler einen Gegner berührt soll eins abgezogen werden. Bis man schließlich bei 0 Herzen stirbt. Leider wurden immer alle 5 Herzen abgezogen, sobald man den Gegner (der sich bewegt) berührte, da der Spieler den Gegner ja noch berührte als ein Herz abgezogen wurde. Also wurden eins nach dem anderen Abgezogen. Ich dachte ich mache den Spieler für kurze zeit unverwundbar, denn der Gegner bewegt sich ja und ist dann "weg". 1000ms müssten locker reichen. Leider funktioniert das irgendwie nicht. Kann mir jemand sagen warum und mir helfen ?