Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DelphiX Kollision nur mit Bestandteil(en) einer Klasse (https://www.delphipraxis.net/60532-delphix-kollision-nur-mit-bestandteil-en-einer-klasse.html)

ghostdawg 8. Jan 2006 17:11


DelphiX Kollision nur mit Bestandteil(en) einer Klasse
 
Habe einen Ball
Delphi-Quellcode:
  TBall = class(TImageSprite)
    public
      procedure DoMove(MoveCount: Integer); override;
      constructor Create(AParent: TSprite ); override;
      procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
  end;
Und mehrere Steine der Klasse Bricks
Delphi-Quellcode:
  TBricks = class(TImageSprite)
    public

    end;

...

var
  Form1:TForm1;
  Brick: array[1..8,1..5] of TBricks;
Es werden mehrere Bricks erzeugt (40 Stück):
Delphi-Quellcode:
for i... blabla for j.. to etc.

          Brick[i,j]:= TBricks.Create(DXSpriteEngine1.Engine);
          with Brick[i,j] do
            begin
              Image := Form1.DXImageList1.Items[j+6];
              Width := Image.Width;
              Height := Image.Height;
              Visible := True;
              x:= (i-1)*75;
              y:=50+(j-1)*15;
            end;
Und ich möchte, dass bei einer Kollision des Balles mit einem bestimmten Brick bspw. Brick[3,5] genau was nur für 3,5 bestimmtes passiert.

Nun kenn ich aus Tutorials und aus der Praxis nur die Anwendung, dass man die Kollisions des Balls mit einer Komponente aus der gesamten Klasse überprüfen kann:
Delphi-Quellcode:
procedure TBall.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  if sprite is TBricks then
    begin
      beep;
      dead;
    end;
end;
Wie kann ich es aber nur für Brick[x,y] machen anstatt für if sprite is TBricks?? Hoffe mir kann jemand weiterhelfen, danke schonmal!

Cicaro 13. Jan 2006 11:11

Re: DelphiX Kollision nur mit Bestandteil(en) einer Klasse
 
In deiner Brick-Klasse solltest du einfach ein oder mehrere Felder deklarieren, die deine Bricks eindeutig identifizieren (IDx und IDy beispielsweise).

Beispiel:
Delphi-Quellcode:
if sprite is TBricks then
  if ((sprite as TBricks).IDx=3) and ((sprite as TBricks).IDy=4)then
    dead;
Man kann die Bricks auch Schachteln:
Delphi-Quellcode:
var
  FirstBrick:TBricks;

FirstBrick:=TBricks.Create(Engine);
with TBricks.Create(FirstBrick) do
...

// und dann
if sprite.Parent = FirstBrick then dead;
Letzteres kann aber etwas kompliziert werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 Uhr.

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