![]() |
AW: Brauche Hilfe bei einer Gehanimation!
Wenn, dann doch eher so?
Delphi-Quellcode:
// als Feld in die Klasse aufnehmen:
// GehAnimation: Integer; procedure TForm1.Timer2Timer(Sender: TObject); begin //Inc(GehAnimation); //if GehAnimation >= 3{Anzahl} then GehAnimation := 0; GehAnimation := (GehAnimation + 1) mod 3{Anzahl}; case GehAnimation of 0: Player.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Graphiken\Charanimation1.ico'); 1: Player.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Graphiken\Charanimation2.ico'); 2: Player.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Graphiken\Charanimation3.ico'); end; end;
Delphi-Quellcode:
Und ich empfehle dir dringens die relativen Pfade abzuschaffen.
// als Feld in die Klasse aufnehmen:
// GehAnimation: Integer; // Verzeichnis: String; // beim Programmstart initialisieren (z.B. in OnCreate): // Verzeichnis := ExtractFileDir(Application.ExeName); procedure TForm1.Timer2Timer(Sender: TObject); begin if Gehen then begin GehAnimation := (GehAnimation + 1) mod 3{Anzahl}; Player.Picture.LoadFromFile(Format('%sGraphiken\Charanimation%d.ico', [Verzeichnis, GehAnimation + 1])); end else begin if GehAnimation >= 0 then // braucht ja nur einmal geladen zu werden Player.Picture.LoadFromFile(Verzeichnis + 'Graphiken\CharanimationStehen.ico'); GehAnimation := -1; end; end; Die Gründe werden häufig genug hier im Forum genannt (siehe SuFu). PS: Statt LoadFromFile alle Bilder nur einmal, beim Programmstart laden und dann via Picture.Assign zuweisen. Also z.B. je Bild ein TPicture in einer Liste (TObjektList) oder notfalls mehrere "unsichtbare" TPicture auf der Form ablegen. |
AW: Brauche Hilfe bei einer Gehanimation!
Code:
heißt doch, dass die Animation (oder besser der Animationsschritt) immer wieder von Platte geladen wird. Wäre es nicht besser, die Animationssequenz zu laden und aus dem Speicher heraus auszugeben?
.LoadFromfile
|
AW: Brauche Hilfe bei einer Gehanimation!
Ja, wäre besser.
Nja, zum Glück läd Windows die Dateien erstmal in den Windows-File-Cache und läd sie so nicht wirklich immer wieder von der Platte (solange noch genug Platz im Cache ist). Aber zusätzlich zum Laden wird ja noch viel mehr gemacht ... quasi wird das bild ja auch noch geparst und die Dateiinhalte entsprechend ausgewertet. |
AW: Brauche Hilfe bei einer Gehanimation!
Zitat:
Grundsätzlich würde ich solche Sequenzen aber auch in eine Klasse laden und dann von der FigurKlasse die SequenzKlasse ansprechen und das passende Bild zurückgeliefert bekommen. Dann wird das viel mehr OOP und vor allem flexibler. |
AW: Brauche Hilfe bei einer Gehanimation!
Zitat:
|
AW: Brauche Hilfe bei einer Gehanimation!
Was machst, damit die Figur geht, und vor allem wann?
Mache das Gegenteil zum Stehenbleiben ;) |
AW: Brauche Hilfe bei einer Gehanimation!
Wobei ich das stehen-gehen-Problem in einem meiner Beispiele auch behandelt hatte. :roll:
Und das mit den bösen relativen Pfaden war och nur ein gutgemeinter Rat. |
AW: Brauche Hilfe bei einer Gehanimation!
Zitat:
Delphi-Quellcode:
Dazu machst du noch ein OnKeyUp-Event:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case Key of 40: moveY := moveY+5;// runter 38: movey := moveY-5;// hoch 37: movex := moveX-5;// links 39: movex := moveX+5;// rechts end; if (Key >= 37) and (Key <= 40) then Timer2.Enabled := TRUE; Char; end;
Delphi-Quellcode:
Nun wird die Gehanimation nur solange ausgeführt, wie eine der Richtungstasten gedrückt wird. Andernfalls wird der Timer2 deaktiviert und die Charanimation0.ico geladen.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if (Key >= 37) and (Key <= 40) then begin Timer2.Enabled := FALSE; Player.Picture.LoadFromFile('.\Graphiken\Charanimation0.ico'); end; end; |
AW: Brauche Hilfe bei einer Gehanimation!
Noch ein Wort von mir: Die Werte 37 bis 40 kannst du durch dienentsprechenden Konstanten VK_DOWN, VK_UP, VK_RIGHT und VK_LEFT ersetzen. Somit wäre sogar der CASE-Zweig lesbar (auch ohne die Kommentare).
Bernhrd |
AW: Brauche Hilfe bei einer Gehanimation!
Nur noch eine Frage: was heißt "Inc" im code den ich bekommen habe? Was macht das? Wenn ichd as nicht weiß, ist es ein wenig scheiße wenn ich meinem Lehrer dann gegenüberstehe und kein wort rausbringe :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 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