Delphi-PRAXiS
Seite 1 von 2  1 2      

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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.
Seite 1 von 2  1 2      

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