AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Brauche Hilfe bei einer Gehanimation!
Thema durchsuchen
Ansicht
Themen-Optionen

Brauche Hilfe bei einer Gehanimation!

Ein Thema von raysto · begonnen am 13. Mai 2011 · letzter Beitrag vom 17. Mai 2011
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#11

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 15. Mai 2011, 11:45
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:
// 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;
Und ich empfehle dir dringens die relativen Pfade abzuschaffen.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Mai 2011 um 11:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rainerg
rainerg

Registriert seit: 5. Aug 2002
Ort: Hannover
82 Beiträge
 
Delphi XE Starter
 
#12

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 15. Mai 2011, 11:51
Code:
.LoadFromfile
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?
Rainer G. aus H.
www.BunteReisebilder.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#13

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 15. Mai 2011, 12:10
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 15. Mai 2011, 12:13
Code:
.LoadFromfile
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?
Jein, Windows wird die Dateien bei der häufigen Benutzung im Cache haben und dann ist das kaum merkbar (vor allem bei dieser Art der Umsetzung )
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
raysto

Registriert seit: 6. Nov 2010
62 Beiträge
 
#15

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 15. Mai 2011, 20:23
Zitat:
Code:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Player.Picture.LoadFromFile('.\Graphiken\Charanimation1.ico');
  Player.Picture.LoadFromFile('.\Graphiken\Charanimation2.ico');
  Player.Picture.LoadFromFile('.\Graphiken\Charanimation3.ico');
end;
Da brauchst du dich nicht wundern, dass er immer das letzte Bild der Animation anzeigt, wenn der Timer-Event innerhalb von ein paar Millisekunden (wenn überhaupt soviel) von oben nach unten durchrauscht ...

Versuchs mal so:
Delphi-Quellcode:
var
   movex,movey,
   AniIndex : integer;

procedure TForm1.FormCreate(Sender: TObject); //Einstellungen und Koordinaten
begin
  form1.DoubleBuffered :=true;
  movex := 1;
  movey := 225;

  AniIndex := 0;
  Timer2.Interval := 125;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Timer2.Enabled := FALSE;
  Player.Picture.LoadFromFile('.\Graphiken\Charanimation' + IntToStr(AniIndex + 1) + '.ico');

  Inc(AniIndex);
  if AniIndex > 2 then
    AniIndex := 0;
  Timer2.Enabled := TRUE;
end;
Zitat:
Und das mit Andorra versteh ich nicht. Wie benutze ich Andorra?
Schau dir mal die Tutorials an: http://www.delphipraxis.net/dp_searc...rums_string=36
Danke für die ganze Hilfe, aber da ich noch nicht so fortgeschritten bin, hbae ich mir einfach mal das oben genommen es läuft auch perfekt, ausser dass mein männchen weiterläuft (also die animation) wenn ich nichts mehr drücke xD Kann ich das noch irgendwie beheben?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 15. Mai 2011, 21:10
Was machst, damit die Figur geht, und vor allem wann?

Mache das Gegenteil zum Stehenbleiben
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#17

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 15. Mai 2011, 22:46
Wobei ich das stehen-gehen-Problem in einem meiner Beispiele auch behandelt hatte.
Und das mit den bösen relativen Pfaden war och nur ein gutgemeinter Rat.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 16. Mai 2011, 08:43
Danke für die ganze Hilfe, aber da ich noch nicht so fortgeschritten bin, hbae ich mir einfach mal das oben genommen es läuft auch perfekt, ausser dass mein männchen weiterläuft (also die animation) wenn ich nichts mehr drücke xD Kann ich das noch irgendwie beheben?
Den Timer2.Enabled immer auf FALSE lassen. Ausser:
Delphi-Quellcode:
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;
Dazu machst du noch ein OnKeyUp-Event:
Delphi-Quellcode:
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;
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.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#19

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 16. Mai 2011, 10:13
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
raysto

Registriert seit: 6. Nov 2010
62 Beiträge
 
#20

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 17. Mai 2011, 14:51
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 07:09 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