Animation

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

smeagle24

Betreff: Animation

BeitragSo, Apr 26, 2009 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mit MilkShape eine Animation einer Tür erstellt. Nun habe ich das Problem, wenn die Animation abgespielt wird, zeigt er immer nur den ersten und denn letzten Frame. Sprich er zeigt dir Tür nur offen oder nur zu, ohne die Frames dazwischen abzuspielen.
Ich habe schon probiert, "anim_speed" zu verändern, mit dem einzigen Erfolg, das die Animation dann gar nicht mehr abgespielt wird. Wie schaff ich es, das die Bewegung, wie die Tür aufgleitet, zu sehen ist und nicht die Tür entweder nur offen oder zu ist?

Hier der Code für meine Animation:
Code: [AUSKLAPPEN]
Function Animation()

   If EntityDistance(main_cam,automatiktuer) > 10 Then
      anim_speed=1
      Animate automatiktuer,3,anim_speed,0,0
   EndIf

   If EntityDistance(main_cam,automatiktuer) < 10 Then
      SetAnimTime automatiktuer,120
      Animate automatiktuer,3,anim_speed,0,0
   EndIf
   
End Function
 

TerrorMachine

BeitragMo, Apr 27, 2009 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Führst du die Funktion Animation() in einer Schleife aus? Warscheinlich schon.

Der Befehl "Animate" darf nicht bei jedem Schleifendurchlauf ausgeführt werden. Das ist bei dir aber der Fall. Darum fängt er immer wieder von vorne an.

Prüfe einfach bei deinen Ifs einfach noch ob die Animation noch läuft mit "Animating"
 

smeagle24

BeitragMo, Apr 27, 2009 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, die Funktion "Animation" die ich geschrieben habe wird aus der Hauptschleife heraus immer wieder aufgerufen.

Habe meine Funktion Animation() folgendermassen umgeändert, so das jetzt wenn ich weiter als 10 Pixel von der Tür entfernt bin, die animation gestopt wird
Code: [AUSKLAPPEN]
Function Animation()

   If EntityDistance(main_cam,automatiktuer) > 10
      anim_speed=1
      Animate automatiktuer,3,anim_speed,0,0
   Else If EntityDistance(main_cam,automatiktuer) < 10
         Animate automatiktuer,0
   EndIf

   If EntityDistance(main_cam,automatiktuer) < 10 Then
      anim_speed=-1
      Animate automatiktuer,3,anim_speed,0,0
   Else If EntityDistance(main_cam,automatiktuer) > 10
         Animate automatiktuer,0
   EndIf
   
End Function


Mein Problem ist aber nach wie vor da. Wenn ich weiter als 10 pixel entfernt bin, dann zeigt er Frame1 der Animation(zu), wenn ich näher dran bin zeigt er mir Frame30(offen).
 

TerrorMachine

BeitragDi, Apr 28, 2009 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Schreibs so:
Code: [AUSKLAPPEN]

 If EntityDistance(main_cam,automatiktuer) > 10
      anim_speed=1
      If Animating(automatiktuer)=0 then
           Animate automatiktuer,3,anim_speed,0,0
      EndIf
 EndIf
 If EntityDistance(main_cam,automatiktuer) < 10 Then
      anim_speed=-1
      If Animating(automatiktuer)=0 then
           Animate automatiktuer,3,anim_speed,0,0
      EndIf
 EndIf

Damit sollte es gehen. So wird die Auf-Animation abgespielt, wenn die du an die Türe heran kommst und wenn die Animation nicht schon läuft. Bei der Zu-Animation ist es das selbe nur mit einer anderen Distance.
 

smeagle24

BeitragDo, Apr 30, 2009 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
So, nach einem Tag Auszeit hat ich heute denn Geistesblitz wies funktioniert. Ich habe in meine Funktion Animation() einen Zähler mit eingebaut, der verhindert, das die Animation in einer Endlosschleife abgespielt wird, weil die Animation ja aus einer Schleife heraus aufgerufen wird. Hier nun der Code meiner Funktion

Code: [AUSKLAPPEN]
Function Animation()

   If EntityDistance(main_cam,automatiktuer) < 10 And animation_zaehler = 1 And Animating(automatiktuer) = 0 Then
      anim_speed=1
      Animate automatiktuer,3,anim_speed,0,0
      animation_zaehler = animation_zaehler+1
   EndIf

   If EntityDistance(main_cam,automatiktuer) > 10 And animation_zaehler = 2 And Animating(automatiktuer) = 0 Then
      anim_speed = -1
      Animate automatiktuer,3,anim_speed,0,0
      animation_zaehler = 1
   End If
   
End Function

Vielen Dank, für die Denkanstösse, welche mich letztendlich in die richtige Richtung gelenkt haben.
 

TerrorMachine

BeitragSa, Mai 02, 2009 10:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Meiner Meinung nach ist der Zähler überflüssig, weil die Animationen genau deffiniert sind.
Wenn du weiter als 10 weg bist und die Tür gerade nicht animiert wird, dann geht sie zu.
Wenn du näher als 10 bist und die Tür gerade nicht animiert wird, dann geht sie auf.

Sollte also auch ohne Zähler funktionieren, oder?
 

smeagle24

BeitragFr, Mai 08, 2009 9:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Sollte man eigentlich meinen, das die Animation immer nur einmal abgespielt wird. Aus irgendeinem Grund, was auch immer, wurde aber die Animation in einer Endlosschleife abgespielt. Dann habe ich einen Zähler miteingebaut, um das zu verhindern.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group