AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi DelphiX für Anfänger (3)
Tutorial durchsuchen
Ansicht
Themen-Optionen

DelphiX für Anfänger (3)

Ein Tutorial von Chegga · begonnen am 2. Feb 2005 · letzter Beitrag vom 26. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Chegga
Chegga
Registriert seit: 5. Nov 2004
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.
Angehängte Grafiken
Dateityp: bmp b-punkt_162.bmp (154,8 KB, 404x aufgerufen)
Angehängte Dateien
Dateityp: zip animation_749.zip (238,5 KB, 197x aufgerufen)
Grüße aus Kirchheim Teck
 
Benutzerbild von Neutral General
Neutral General

 
Delphi 10.2 Tokyo Professional
 
#2
  Alt 2. Feb 2005, 13:16
Vorschlag :

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Animation := TAnimation.Create(DXSpriteEngine1.Engine);
  with Animation do begin
   Image := Form1.DXImageList1.Items.Find('1'); // *
   X := 0;
   Y := 0;
   Width := Animation.Image.Width; // *
   Height := Animation.Image.Height; // *
   AnimCount := 5;
   AnimLooped := True;
   AnimSpeed := 20/1000;
   AnimStart := 0;
  end;
end;
*) = Kann man auch (bzw würde ich) in TAnimation.Create schreiben.
(Dafür die Create Procedure überschreiben !)
Michael
  Mit Zitat antworten Zitat
Nils_13
 
#3
  Alt 2. Feb 2005, 13:26
Hi,

nicht schlecht, hast du aber von Delphi-Treff
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#4
  Alt 2. Feb 2005, 13:36
Nils...

erst lesen dann schreiben:

Zitat:
P.S.: Dieses Tutorial hat "MiGa" erstellt.
Es wurde von meiner Wenigkeit ein weing abgeändert.
Manuel
  Mit Zitat antworten Zitat
Minz
 
#5
  Alt 11. Mär 2005, 09:43
Ich hätte da noch eine Frage:

Ich verstehe nicht den Zusammenhang bei dem Timer.Intervall und Animation.AnimSpeed

Überhaupt bekomme ich erst etwas zu sehen, wenn ich das Timer.Intervall auf 1 stelle oder zumindest eine kleine Zahl.
  Mit Zitat antworten Zitat
ferby

 
Delphi 2010 Enterprise
 
#6
  Alt 28. Sep 2005, 15:33
Hallo

Zitat:

Ich verstehe nicht den Zusammenhang bei dem Timer.Intervall und Animation.AnimSpeed

Ich versteh das auch nicht, kann das jemand beantworten???


mfg,
Ferby
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

 
Delphi 10.2 Tokyo Professional
 
#7
  Alt 28. Sep 2005, 17:50
Naja es nützt halt nix wenn man eine schnelle Animationsgeschwindigkeit hat aber der Timer nur ein Intervall von 1000... Die Animationsgeschwindigkeit (AnimSpeed) ist halt im Verhältnis zum Timer.

AnimSpeed := 20/1000 ist bei
DXTimer1.Intervall := 1000; natürlich deutlich langsamer als bei
DXTimer1.Intervall := 1;
Michael
  Mit Zitat antworten Zitat
Cicaro

 
Delphi 7 Personal
 
#8
  Alt 18. Jan 2006, 14:45
Zitat von Chegga:
Vorwort:
Ich gehe davon aus, dass die zwei vorherigen Tutorials sorgfältig gelesen worden sind
Es scheint mir in solchen Fällen sinnvoll zu sein eine kurze Zusammenfassung zu geben. Oder ein Vorwort, das sofort das Thema charakterisiert.
Ein Beispielstichwort: "Wie können Sprites animiert werden ?"
  Mit Zitat antworten Zitat
ichbins

 
Delphi 2005 Personal
 
#9
  Alt 20. Feb 2006, 14:12
Zitat:
---------------------------
Anwendungsfehler
---------------------------
Exception EReadError in Modul Project1.exe bei 0001858F.

Fehler beim Lesen von DXSpriteEngine1.Items: Eigenschaft Items existiert nicht.


---------------------------
OK
---------------------------
kommt auch wenn ich einfach nur 'n spriteengine auf die form tu ohne Code (beim starten)
Michael Enßlin
  Mit Zitat antworten Zitat
ichbins

 
Delphi 2005 Personal
 
#10
  Alt 25. Feb 2006, 15:18
weiss keiner was?

nochmal genau was ich gemacht hab:
  • Neues Projekt
  • DelphiX.DXSpriteEngine aufs Form platziert
  • kompiliert
  • fehlermeldung im Programm beim Starten (bevor Form sichtbar ist)
Zitat:
---------------------------
Anwendungsfehler
---------------------------
Exception EReadError in Modul Project1.exe bei 0001858F.

Fehler beim Lesen von DXSpriteEngine1.Items: Eigenschaft Items existiert nicht.


---------------------------
OK
---------------------------
Michael Enßlin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 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