Hi,
hier also die Fortsetzung von Teil II.
Kapitel 4
Animationen
Vorwort:
Ich gehe davon aus, dass die zwei vorherigen Tutorials sorgfältig gelesen worden sind
Um eine Animation zu erstellen, benötigen wir erst einmal Bild,
genauer gesagt mehrere Bilder, da es ja eine Animation ist.
Gut, also wie müssen die Bilder aufgebaut sein?
DelphiX macht es recht einfach, mit Animationen umzugehen.
Es müssen nicht viele Bilder sein, sonder alle Animationsschritte
können in einer Bild-Datei enthalten sein.
(Das ganz sieht dann so aus: Siehe Anlage, B-Punkt.bmp)
Als Komponenten brauchen wir diesmal wieder eine
DXDraw Fläche,
die
DXImageList,
DXTimer und die
DXSpriteEngine Komponente.
Man muss wieder daran denken, dass die
DXDraw Eigenschaften in den Komponenten wieder auf
DXDraw1 weisen.
(Die betreffenden Komponenten sind DXImageList und DXSpriteEngine.)
In die DXImageList laden wir unser Animationsbild (B-Punkt.bmp).
Da wir wollen, dass die Bilder nacheinander angezeigt werden,
müssen wir festlegen, wie breit und hoch ein Animationsbild ist.
Das können wir mit Hilfe der PatternWidth und PatternHeight Eigenschaft des Bildes in der DXImageList.
Dabei gilt folgendes Prinzip:
Unsere Bild-Datei (B-Punkt.bmp) hat eine Breite von 380 Pixel
und eine Höhe von 139 Pixel.
Folglich hat jedes Bild in B-Punkt.bmp 76 "Breitenpixel".
Warum?
Nun, wir haben 5 Bilder in B-Punkt.bmp die alle gleich breit sind.
Also bekommt jedes Bild 76 "Breitenpixel". (380 / 5 = 76)
Um die Höhe müssen wir uns in diesem Falle nicht kümmern.
Jetzt schreiben wir hinter
PatternHeight 139
und hinter
PatternWidth 76.
Als nächstes machen wir einen neuen Objekttyp der Abstammung TImageSprite. Das sollte dann so aussehen:
TAnimation = class(TImageSprite);
und vereinbaren:
Delphi-Quellcode:
var
Form1: TForm1;
Animation: TAnimation;
Dann gehen wir in das Form.Create Ereignis und schreiben folgendes:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
Animation := TAnimation.Create(DXSpriteEngine1.Engine);
Animation.Image := Form1.DXImageList1.Items.Find('1');
Animation.X := 0;
Animation.Y := 0;
Animation.Width := Animation.Image.Width;
Animation.Height := Animation.Image.Height;
Animation.AnimCount := 5;
Animation.AnimLooped := True;
Animation.AnimSpeed := 20/1000;
Animation.AnimStart := 0;
end;
Zuerst wir das neue Objekt erstellt (Create-Anweisung).
Die Zweite Zeile ist etwas anders, als wir sonst Bilder geladen haben.
Diese Find('Name')Anweisung ist besser zu benutzen,
da wir uns nicht mehr die einzelnen Item Zahlen merken müssen,
sondern nur die Namen die wir den Bilder gegeben haben
(In diesem Beispiel heißt das Bild "1").
Die nächsten 4 Zeilen sind wieder
Standart Anweisungen.
Sie bestimmen die X,Y-Werte und die Größe des Bildes.
Die letzten vier Anweisungen sind für unsere Animation wichtig.
AnimCount bedeutet, dass wir insgesamt 5 Bilder in der Animation haben.
AnimLooped heißt, dass die Animation wieder neu anfängt,
wenn alle Bilder durch sind.
AnimSpeed (N/1000) ist die Zahl der Framewechsel in einer Sekunde.
AnimStart bedeutet, dass die Animation mit dem 1. Bild (1.Bild = 0 !) beginnt.
Als letztes schreiben wir in die DXTimer.OnTimer Eigenschaft:
Delphi-Quellcode:
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
DXSpriteEngine1.Move(1);
DXDraw1.Surface.Fill(0);
DXSpriteEngine1.Draw;
DXDraw1.Flip;
end;
Die erste Anweisung bedeutet, das alle Sprites in der DXSpriteEngine bewegt werden.
Als nächstes wird der Hintergrund der DXDraw-Oberfläche mit der Farbe Schwarz gefüllt.
Die DXSpriteEngine1.Draw Anweisung bedeutet, dass alle Bilder angezeigt werden.
Flip müsste bekannt sein.
Drückt jetzt F9 und endlich könnt ihr eure Animation bewundern.
MfG Marc
P.S.: Dieses Tutorial hat "MiGa" erstellt.
Es wurde von meiner Wenigkeit ein weing abgeändert.
Marc P.
Grüße aus Kirchheim Teck