Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Andorra 2D Frage: Wie antworte ich auf eine Kollision? (https://www.delphipraxis.net/113625-andorra-2d-frage-wie-antworte-ich-auf-eine-kollision.html)

Spiderpig_GER_15 11. Mai 2008 20:46


Andorra 2D Frage: Wie antworte ich auf eine Kollision?
 
Hi,

bin gerade dabei Andorra zu lernen, un habe vor ein Fangen Spiel zu Programmieren.
Ich bin so weit das man 2 figuren steuern kann die dann über den bildschirm flitzen, nur
ich weiß nicht wie ich schauen kann ob die sich berührt(kollidiert) haben.

Habe keine Ahnung wie das geht, aus den Beispielen kann ich es auch nicht entnehmen, hoffe
mir kann jemand helfen

MfG

Spiderpig

igel457 11. Mai 2008 20:52

Re: Andorra 2D Frage: Wie antworte ich auf eine Kollision?
 
Wenn du die Spriteengine verwendest, dann funktioniert dies eigentlich ganz einfach. Schau dir mal in den Demos
  • Wormhunter
  • PixelCheck
  • Breakout
die Methode "DoCollision" sowie den Aufruf von "Collision" an.

Wenn du die Spriteengine nicht verwendest, musst du manuell überprüfen ob sich die beiden Grenzrechtecke der Grafiken überschneiden.

Spiderpig_GER_15 11. Mai 2008 21:31

Re: Andorra 2D Frage: Wie antworte ich auf eine Kollision?
 
ich kriege es immernoch nicht hin :(

Delphi-Quellcode:

type
  TMario = class(TImageSprite)
    private
    protected

    public
      constructor Create(AParent:TSprite);override;
      procedure GoRight  ;
      procedure GoLeft   ;
      procedure GoUp     ;
      procedure GoDown   ;
      procedure SetStartPosition;
      procedure DoCollision(Sprite: TSprite; var done: boolean); override;

  end;
Delphi-Quellcode:
procedure TMario.GoRight;
begin
inherited;
Image:=MyImageList.Find('MarioRIGHT');
X:=X + 0.4;
MyMario.AnimStart:=1;
MyMario.AnimStop :=2;
MyMario.AnimLoop:=true;
MyMario.AnimActive:=true;
MyMario.AnimSpeed:=30;
Collision;
end;
und

Delphi-Quellcode:
procedure TMario.DoCollision(Sprite: TSprite; var done: boolean);
begin
  if Sprite is TSnake then
  begin
    showmessage('geht');
  end;
end;
ich weiß nciht was daran falsch ist, es tut sich einfach garnichts :(

MfG Spiderpig

Nuclear-Ping 11. Mai 2008 22:14

Re: Andorra 2D Frage: Wie antworte ich auf eine Kollision?
 
Hab schon 'ne Weile nix mehr mit Andorra gemacht, aber fehlt da nicht noch 'ne "DoMove"-Routine? Bei mir ruft diese "Collision" auf.

Delphi-Quellcode:
procedure TSpriteFigure.DoCollision(Sprite: TSprite; var Done: boolean);
begin
  CollisionEdges := [];
  FHitsEnemy := FALSE;
  FWallCollision := FALSE;

  if FDead then
    Exit;

  GetCollisionEdges;

  if (Sprite is TWall) then
    begin
      // ...
    end;
end;

procedure TSpriteFigure.DoMove(TimeGap: Double);
begin
  inherited;

  FTimeGap := TimeGap;
  FTargetSprite := nil;

  // ...

  Collision;

  XSpeed := 0;
  YSpeed := 0;

  if FWillDie then
    begin
      // ...
    end;
end;
Und soweit ich weiß, macht das die Demo auch so? :gruebel:

NickelM 12. Mai 2008 01:25

Re: Andorra 2D Frage: Wie antworte ich auf eine Kollision?
 
LOL MAchst ein spiel mit Mario :mrgreen:
Das ist mein Vorname :bounce2:

Spiderpig_GER_15 12. Mai 2008 16:09

Re: Andorra 2D Frage: Wie antworte ich auf eine Kollision?
 
ja,
du kennst nich zufällig superMario?
Ist ein bischen kopiert, vor allem Die Figur :mrgreen:

Achso, danke für die Tipps, habs hinbekommen, der Fehler war ein anderer... :oops:
*ist mir aber peinlich welcher* :lol:

MfG Spiderpig


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 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