Ich arbeite im Moment an einem Rollenspiel. Die Kollision bei dem Monster erfolgt so ds wenn es gegen eine Wand läuft sich eine andere Richtung aussucht. Das funktioniert auch wunderbar außer das wenn das Monster von oben oder unten gegen die Wand läuft es teilweise stecken bleibt oder/und sich verheddert oder sogar "Mit dem Kopf durch die Wand geht". Ich habe das RPG (naja es soll mal eins werden..) in den Anhang geuploaded damit ihr euch mal ein Bild von dem Problem machen könnt.
Die Kollisionsabfrage :
Delphi-Quellcode:
procedure TMonster.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if (Sprite is TWand) and (Richtung = 1) then begin
X:=X-2;
Richtung := 5;
end
else
if (Sprite is TWand) and (Richtung = 2) then begin
X:=X+2;
Richtung := 6;
end
else
if (Sprite is TWand) and (Richtung = 3) then begin
Y:=Y-5;
Richtung := 7;
end
else
if (Sprite is TWand) and (Richtung = 4) then begin
Y:=Y+5;
Richtung := 8;
end;
end;
und dann wird eine neue Richtung "ausgewürfelt" :
Delphi-Quellcode:
procedure TForm1.Timer3Timer(Sender: TObject);
var hr : integer;
begin
if Richtung = 5 then begin
Richtung := random(3)+2;
end;
if Richtung = 6 then begin
hr := random(4)+1;
if hr = 2 then begin
hr := 6;
end
else
Richtung := hr //2
end;
if Richtung = 7 then begin
hr := random(4)+1;
if hr = 3 then begin
hr := 7;
end
else
Richtung := hr //3
end;
if Richtung = 8 then begin
Richtung := random(3)+1;
end;
end;