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 1 von 2  1 2      
Benutzerbild von rainerg
rainerg

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

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 13. Mai 2011, 19:45
Aus wieviel Bilder besteht denn eine Bewegungssequenz?
Du musst ja für jeden einzelnen Schritt deines Männchens das Bewegungsbild ändern. Die Sequenz also schrittweise durchlaufen lassen und dann wieder von vorn beginnen.
So wie Du das erläuterst, klingt das fast wie ein animiertes GIF was du nutzt.
Rainer G. aus H.
www.BunteReisebilder.de
  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
 
#2

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 13. Mai 2011, 22:21
Aus wieviel Bilder besteht denn eine Bewegungssequenz?
Du musst ja für jeden einzelnen Schritt deines Männchens das Bewegungsbild ändern. Die Sequenz also schrittweise durchlaufen lassen und dann wieder von vorn beginnen.
So wie Du das erläuterst, klingt das fast wie ein animiertes GIF was du nutzt.
Ich denke mal das macht er wohl auch schon und deswegen funktioniert es nicht
Pseudocode
Code:
Routine Animieren
  Für jedes Bild
    Zeige Bild
Während der Routine wird aber die Anzeige nicht aktualisiert, darum sieht es so aus, als ob die Figur nicht animiert wird

Eine Möglichkeit wäre die Animation über einen Timer gesteuert zu realisieren.
Code:
Routine AnimationsTimer
  Figur.EinenSchrittWeiter
  Figur.MaleBildZumSchritt
Wenn es vernünftig werden soll führt allerdings der Weg zu Andorra
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
 
#3

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 14. Mai 2011, 22:14
Also bisher sieht mein Code so aus (nicht wirklich viel )
Delphi-Quellcode:
var
   movex,movey : integer;

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

procedure TForm1.Gehen(Sender: TObject); //Gehen
begin
  Timer2.Enabled := true
end;



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;

procedure Char;
begin
  Form1.Player.left := moveX;
  Form1.Player.top := moveY;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  I: Integer;
begin
  if (key = 40) then moveY := moveY+5;// runter
  if (key = 38) then movey := moveY-5;// hoch
  if (key = 37) then movex := moveX-5;// links
  if (key = 39) then movex := moveX+5;// rechts
  if (key = 39) then Timer2.Enabled := true;

  Char;

 end;


end.
Und das mit Andorra versteh ich nicht. Wie benutze ich Andorra?
  Mit Zitat antworten Zitat
nuclearping

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

AW: Brauche Hilfe bei einer Gehanimation!

  Alt 15. Mai 2011, 10:39
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

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.
Ein Therapeut entspricht 1024 Gigapeut.

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
 
#6

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
Online

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

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.
Ein Therapeut entspricht 1024 Gigapeut.
  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
 
#8

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
 
#9

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
 
#10

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
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 14:10 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