DelphiX-Tutorial für Anfänger
Ursprünglich erstellt von MiGa Mail Homepage
(Danke!!)
Design-Anpassung und Veränderung von Simon
Kapitel 6
Ein großer Teil des Quellcodes wurde schon im vorherigen Kapitel
verwendet und wird in diesem Kapitel ergänzt.
Kollision zwischen Sprites
In diesem Kapitel werde ich zeigen, wie einfach es ist,
festzustellen, ob zwei Sprites gegeneinander gestoßen sind.
Zuerst werden wir in unser Beispiel vom vorherigen Kapitel noch
ein Bild einfügen. Wir laden ein zweites Bild in unsere DXImageList
Komponente und geben ihm den Namen "Stein". Dann erzeugen wir unser
zweites Bild auf unsere DXDraw Oberfläche: TAnimation = class(TImageSprite)
public
procedure DoMove(MoveCount: Integer); override; {war schon da}
constructor Create(AParent: TSprite ); override; {war schon da}
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
end;
TGegenstand = class(TImageSprite)
public
constructor Create(AParent: TSprite ); override;
end;
var
Form1: TForm1;
Animation:tanimation; {war schon da}
Gegen:tgegenstand;
implementation
constructor TGegenstand.Create(AParent: TSprite );
begin
inherited Create(AParent);
Image:=Form1.DXImageList1.Items.Find('Stein');
Width := Image.Width;
Height := Image. Height;
Visible:=True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with TAnimation.Create(DXSpriteEngine1.Engine) do {war schon da}
begin
x:=0;
y:=0;
end;
with TGegenstand.Create(DXSpriteEngine1.Engine) do
begin
x:=40;
y:=40;
end;
end;
Wie vielleicht schon gesehen wurde, haben wir eine neue Prozedur:
DoCollision Die sollte wie folgt aussehen: procedure TAnimation.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if sprite is TGegenstand then
begin
beep;
dead;
end;
end;
Mit Sprite kann man überprüfen gegen wen TAnimation gestoßen ist.
In diesem Beispiel also gegen unser zweites Bild. Mit dead wird
TAnimation gelöscht.
Damit jedes mal auf Kollision überprüft
wird, wenn sich unser Sprite bewegt, müssen wir in die Move Prozedur
folgendes einfügen: procedure TAnimation.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
If isUp in Form1.DXInput1.States Then
Y := Y -10;
If isDown in Form1.DXInput1.States Then
Y := Y + 10;
If isLeft in Form1.DXInput1.States Then
X := X -10;
If isRight in Form1.DXInput1.States Then
X := X +10;
AnimCount := 5;
AnimLooped := True;
AnimSpeed := 20/1000;
AnimStart := 0;
Collision; {das muss ergänzt werden}
end;
Das war's dann wieder mal. Per F9 kann sich wieder die vollendete
Arbeit angucken.
<<Vorheriges
Kapitel>> <<Nächstes
Kapitel>>
|