Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DelphiX - Monster Synchron-Laufen verhindern (https://www.delphipraxis.net/28858-delphix-monster-synchron-laufen-verhindern.html)

Neutral General 31. Aug 2004 13:09


DelphiX - Monster Synchron-Laufen verhindern
 
Ich habe eine Klasse TMonster.
TMonster hat eine prozedur DoMove.
Das Problem ist : Wenn ich mehrere TMonsters (Monster1,Monster2,...) auf dem Spielfeld habe laufen beide Monster genau gleich ... Wenn einer nach oben läuft läuft der andere auch nach oben...

Bei einer Kollision soll das Monster eine andere Richtung wählen. Wenn ein Monster gegen eine Wand knallt sucht es sich eine andere Richtung. Das andere Monster läuft dann auch in diese andere Richtung, auch wenn es nirgendwo gegengestoßen ist.

Wie mache ich das jedes Monster "seinen eigenen Weg geht" ?

Die Bewegungs-Procedure :

Delphi-Quellcode:
procedure TMonster.DoMove(MoveCount: Integer);
begin
  inherited DoMove(MoveCount);

  if Richtung = 1 then begin
  X:=X+1;
  AnimCount := 3;
  AnimLooped := true;
  AnimSpeed := 100/1000;
  AnimStart := 3;
  end;

  if Richtung = 2 then begin
  X:=X-1;
  AnimCount := 3;
  AnimLooped := true;
  AnimSpeed := 100/1000;
  AnimStart := 9;
  end;

  if Richtung = 3 then begin
  Y:=Y-1;
  AnimCount := 3;
  AnimLooped := true;
  AnimSpeed := 100/1000;
  AnimStart := 0;
  enD;

  if Richtung = 4 then begin
  Y:=Y+1;
  AnimCount := 3;
  AnimLooped := true;
  AnimSpeed := 100/1000;
  AnimStart := 6;
  end;

  Collision;
end;
Die Collisions-Procedure :

Delphi-Quellcode:
procedure TMonster.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
randomize;
  if (Sprite is TWand) and (Richtung = 1) then begin
   X:=X-2;
   Richtung := random(4) +1;
  end
  else
  if (Sprite is TWand) and (Richtung = 2) then begin
   X:=X+2;
   Richtung := random(4)+1;
  end
  else
  if (Sprite is TWand) and (Richtung = 3) then begin
   Y:=Y+2;
   Richtung := random(4)+1;
  end
  else
  if (Sprite is TWand) and (Richtung = 4) then begin
  Y:=Y-2;
  Richtung := random(4)+1;
  end;
end;

KrasserChecker 31. Aug 2004 13:46

Re: DelphiX - Monster Synchron-Laufen verhindern
 
Nur ne Frage:
Sind "Richtung", "AnimCount", "AnimLoop" usw. Variablen oder Felder? :oops:

Neutral General 31. Aug 2004 14:01

Re: DelphiX - Monster Synchron-Laufen verhindern
 
Richtung : Integer (Zur bestimmung in welche Richtung das Monster läuft)

und die Anim-sachen gehören zu jedem Sprite dazu.
Die sind für die Animation da ...
Aber das ist eigentlich nicht so wichtig ...

Spezi1980 31. Aug 2004 14:20

Re: DelphiX - Monster Synchron-Laufen verhindern
 
Es sieht für mich so aus, als hättest du die Variablen Richtung,... nicht in der Klasse TMonater sondern irgendwo anders deklariert. Du must, damit jedes "Monster" seine eigenen Variablen hat diese Variablen direkt unter private deklarieren.

Delphi-Quellcode:
{in etwa so...}
TMonster = class({...})
private
  //hier alle Variablen des Monsters
  Richtung  : Integer;
  Geschwindugkeit : Integer;
  {...}
public
  procedure doMove({...});
end;

Neutral General 31. Aug 2004 14:26

Re: DelphiX - Monster Synchron-Laufen verhindern
 
Ok danke ich werds mal ausprobieren ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz