Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Animation wird nicht richtig abgespielt mit DelphiX (https://www.delphipraxis.net/38720-animation-wird-nicht-richtig-abgespielt-mit-delphix.html)

theCOW 23. Jan 2005 12:31


Animation wird nicht richtig abgespielt mit DelphiX
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Ja, ich habe wieder ein Problem =)

Also, ladet euch mal das Projekt runter und ihr werdet sehen, das die Explosions-Animation manchmal nicht richtig abgespielt wird (man sieht nur die 2 letzten Bilder).

Dies passiert aber nicht immer.

Also, es wäre nett, wenn mir jemand sagen könnte woran das liegt.


Danke im vorraus

mfg
theCOW

Die Muhkuh 23. Jan 2005 12:47

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Hi,

ich kann dir das nicht bestätigen. Bei mir wird alles angezeigt.

Aber mir ist was anderes aufgefallen:

Delphi-Quellcode:
constructor TAnimation.Create(AParent: TSprite);
begin
  inherited Create(AParent);
  Image := Form1.DXImageList1.Items.Find('1');
  Width := Image.Width;
  Height := Image.Height;
  Visible := true;

  AnimCount := 4;
  AnimLooped := true;
  AnimSPeed := 24/100;
  AnimStart := 0;
end;

procedure TAnimation.DoMove(MoveCount: integer);
begin

  inherited DoMove(MoveCount);


  if FMove = true then
  begin

    if (IsUp in Form1.DXInput1.States) and (Y >= 0) then
      Y := Y-vY;
    if (IsDown in Form1.DXInput1.States) and (Y+Height <= Form1.DXDraw1.Height) then
      Y := Y+vY;
    if (IsLeft in Form1.DXInput1.States) and (X >= 0) then
      X := X-vX;
    if (ISRight in Form1.DXInput1.States) and (X+Width <= Form1.DXDraw1.Width) then
      X := X+vX;


  (*  AnimCount := 4;
    AnimLooped := true;
    AnimSPeed := 24/100;
    AnimStart := 0; *) // Da gehört ins OnCreate und nicht in die DoMove-Procedure!

    Collision;
  end
  else
    if FCollision then
    begin
      if AnimPos = 3 then
        Dead;
    end;
end;

theCOW 23. Jan 2005 12:51

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Hi,

Hmm...dann hat mir mein Tutorial wohl Schwachsinn erzählt, dort ist es nämlich so gemacht....das hat mich auch schon gewundert muss ich sagen ^^

Vielleicht liegt auch das Anzeigeproblem daran... =)

Wieder einmal Danke für deine Hilfe :thumb:


EDIT: Hmm, das hat jetzt leider immer noch nichts an meinem Anzeigeproblem geändert...Wer kann denn noch dieses Problem feststellen???



mfg
theCOW

Die Muhkuh 23. Jan 2005 12:59

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Hi,

kannst du nochmal genau beschreiben, was nicht passiert?

Das die nur die letzten zwei Bilder angezeigt werden ist komisch

theCOW 23. Jan 2005 13:04

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Zitat:

Zitat von Spider
Hi,

kannst du nochmal genau beschreiben, was nicht passiert?

Das die nur die letzten zwei Bilder angezeigt werden ist komisch

Naja, wenn ich mit dem "M" gegen die "Mauer" stoße, dann explodiert das "M".
In manchen Fällen allerdings werden von der Animation nur die letzten 2 Bilder angezeigt (vielleicht werden die ersten 2 ja ganz schnell abgespielt).

Das passiert nicht immer...probier mal ein bischen aus mit der exe (ohne neu zu compilieren...es könte ja auch an meinm Delphi liegen??)


mfg
theCOW

Die Muhkuh 23. Jan 2005 13:12

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Hi,

mach mal die Animationgeschwindigkeit (AnimSpeed) kleiner. Vielleicht 15/1000. Dann sieht du welche abgespielt werden

theCOW 23. Jan 2005 13:16

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Hallo,

Hab ich gemacht....Da konnte man sehr schön sehen das nur das letzte Bild abgespielt worden ist.

Ich hab weiterhin keine Ahnung weshalb das so ist...tritt das bei deinem Rechner etwa nicht auf???

Also ich denk mal net das es an meinem Rechner liegt (2.66 ghz 120gb festplatte 256 mb-ram)....

Sag mal ob das Problem bei dir auch auftritt, ihc konnte nämlich noch keine Regelmäßigkeit feststellen, wann es auftritt....es scheint Willkürlich zu sein (was ich jedoch bezweifle).


Danke im vorraus

mfg
theCOW

Die Muhkuh 23. Jan 2005 13:21

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Hi,

ich glaub ich hab ihn:
Delphi-Quellcode:
procedure TAnimation.DoCollision(Sprite: TSprite; var Done: boolean);
begin
  if not FCollision then
  begin
    if Sprite is TStone then
    begin
      FCollision := true;
      FMove := false;

      Image := Form1.DXImageList1.Items.Find('Explosion');
      Width := Image.Width;
      Height := Image.Height;
      AnimCount := Image.PatternCount;
      AnimSpeed := 12/1000;
      AnimLooped := false;
      AnimStart := 0;
      Form1.DXWaveList1.Items.Find('Explosion').Play(false);
    end;
  end;
end;
Wie wäre es zuerst das Bild laden und AnimCount setzen :stupic: ?

theCOW 23. Jan 2005 13:24

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Hallo,

Sry es hat nichts geändert.....Ich vermute mal, das er für die ersten 2-3 Bilder den Anim-Speed von dem "M" benutzt, welcher bei 24/100 ja ziemlich hoch ist.

Nur wie kann ich das umgehen...vielleicht mit sleep(1) oder so....

EDIT: daran liegt es doch nicht....hab nämlich mal ausprobiert was passiert, wenn ich den "M" AnimSpeed auch auf 1/100 setze...das gleiche..

Was mir auch noch aufgefallen ist: Manchmal zeigt er die 2 ltzten Bilder, manchmal nur das letzte und manchmal die ganze Aniamtion....also das ist schon komisch

Tritt das Problem bei dir eigentlich auch auf??



Danke im vorraus!


mfg
theCOW

Die Muhkuh 23. Jan 2005 13:28

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Hi,

24/100? :shock: Nenene du, das müssen 24/1000 sein. Nciht 24/100. Deswegen klappte das bei mir auch. Ich hab da aus reflex 24/1000 hingeschrieben. Änders mal (auch bei der Explosion)

Delphi-Quellcode:
constructor TAnimation.Create(AParent: TSprite);
begin
  inherited Create(AParent);
  Image := Form1.DXImageList1.Items.Find('1');
  Width := Image.Width;
  Height := Image.Height;
  Visible := true;

  AnimCount := 4;
  AnimLooped := true;
  AnimSPeed := 24/1000; //<--
  AnimStart := 0;
end;

procedure TAnimation.DoMove(MoveCount: integer);
begin

  inherited DoMove(MoveCount);
  if FMove = true then
  begin

    if (IsUp in Form1.DXInput1.States) and (Y >= 0) then
      Y := Y-vY;
    if (IsDown in Form1.DXInput1.States) and (Y+Height <= Form1.DXDraw1.Height) then
      Y := Y+vY;
    if (IsLeft in Form1.DXInput1.States) and (X >= 0) then
      X := X-vX;
    if (ISRight in Form1.DXInput1.States) and (X+Width <= Form1.DXDraw1.Width) then
      X := X+vX;

    Collision;
  end
  else
    if FCollision then
    begin
      if AnimPos = 3 then
        Dead;
    end;
end;

procedure TAnimation.DoCollision(Sprite: TSprite; var Done: boolean);
begin
  if not FCollision then
  begin
    if Sprite is TStone then
    begin
      FCollision := true;
      FMove := false;

      Image := Form1.DXImageList1.Items.Find('Explosion');
      Width := Image.Width;
      Height := Image.Height;
      AnimCount := Image.PatternCount;
      AnimSpeed := 12/1000; //<--
      AnimLooped := false;
      AnimStart := 0;
      Form1.DXWaveList1.Items.Find('Explosion').Play(false);
    end;
  end;
end;

theCOW 23. Jan 2005 13:33

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Sorry, aber das bringt auch nichts, das bringt nur, das die Animationen langsamer gehen...ausserdem mach ich es lieber mit /100 weil das dann wirklich die Frames pro Sekunde sind, was bei /1000 nicht der Fall ist.

Der Fehler mit den "verschluckten" Bildern tritt allerdings immer noch auf......

Hmmmm....ich hab keine Ahnung woran das liegen könnte

Probier mal die unkompilierte exe aus (direkt aus der .zip), ob dann der Fehler bei dir auch auftritt

edit: probier es ein paar mal aus, bei den ersten 3 Versuchen klappts bei mir nämlich auch (nicht immer!)

mfg
theCOW

Flogo 23. Jan 2005 13:39

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Versuchs mal mit AnimPos := AnimStart;
Außerdem soolltest du die Größe deiner Animationen nicht gleich Image.Width/Height setzen, sondern gleich Image.PatternWidth/Height, da ja das Bild größer ist, als das, was du sehen willst, weil es eben aus mehreren Bilder besteht (man was für ein Satz).

theCOW 23. Jan 2005 13:44

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Zitat:

Zitat von Flogo
Versuchs mal mit AnimPos := AnimStart;
Außerdem soolltest du die Größe deiner Animationen nicht gleich Image.Width/Height setzen, sondern gleich Image.PatternWidth/Height, da ja das Bild größer ist, als das, was du sehen willst, weil es eben aus mehreren Bilder besteht (man was für ein Satz).

OMG DANKE!!!

Du hast gerade mein Problem gelöst :thumb:


Ok, hat sich erledigt...das Problem war wirklich, das ich AnimPos auf AnimStart setzen musste.


Danke an Spider und Danke an Flogo für eure Hilfe =)


mfg
theCOW

Die Muhkuh 23. Jan 2005 13:44

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Hi,

1000 = 1 Sek. 24/1000 = 24 Frames pro Sekunde (kommt auch auf den Timer an, wie der eingestellt ist).

Wenn ich das so mache, wie ich es gesagt habe, habe ich keine PRobleme damit.

theCOW 23. Jan 2005 13:46

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Zitat:

Zitat von Spider
Hi,

1000 = 1 Sek. 24/1000 = 24 Frames pro Sekunde (kommt auch auf den Timer an, wie der eingestellt ist).

Wenn ich das so mache, wie ich es gesagt habe, habe ich keine PRobleme damit.

Vielleicht hast du 'ne aktueller Version von DelphiX...auf jeden Fall funktioniert es bei Mir mit /100 =)

Ausserdem kommt es ja nur auf die Tatsächliche Geschwindigkeit an ^^


mfg
theCOW

Oxmyx 23. Jan 2005 16:50

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Delphi-Quellcode:
var
  Form1: TForm1;

  Animation: TAnimation;
  Stein: TStone;

  FCollision:boolean=false;
  FMove:boolean=true;
Wieso schreibst du "FCollision", wenn es gar kein Feld ist? Ist das nicht etwas irreführend?

theCOW 23. Jan 2005 17:59

Re: Animation wird nicht richtig abgespielt mit DelphiX
 
Zitat:

Zitat von Oxmyx
Delphi-Quellcode:
var
  Form1: TForm1;

  Animation: TAnimation;
  Stein: TStone;

  FCollision:boolean=false;
  FMove:boolean=true;
Wieso schreibst du "FCollision", wenn es gar kein Feld ist? Ist das nicht etwas irreführend?

Ist ja auch nur ein Testprogramm...hab das FCollision aus nem andren Programm übernommen ohne darüber nachzudenken ^^

Bin gerade erst in DelphiX eingestiegen, alsosei mir nicht böse =)


mfg
theCOW


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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