Problem beim Animieren

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Kurzer

Betreff: Problem beim Animieren

BeitragMi, Jan 02, 2008 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute!
Wir (ein kumpel + ich) haben zur Zeit ein Problem beim Animieren, bzw. mehrere.
Wir haben in einer .b3d Datei mehrere Animationen gespeichert (Frame 1-8 ist Laufen, 8-13 springen usw. usw.). Eines unserer Problem besteht darin, das die Figur beim vorwärts bzw. Rückwärtslaufen immer die ganze Animation (Frame 1 bis 13) und nicht nur die Laufani (Frame 1 bis 8) abspielt.
Beim Springen dann ergibt es sich ein 2. Problem. Im 3D Programm (Blender) sind es 6 Frames. Wenn ich die Figur hier aber springen lasse spielt Blitz 3D gerade mal ein Frame ab und das geht so schnell, dass man es kaum sehen kann.

Was können wir ändern, damit wird die beiden Probleme nicht mehr haben?


Hier ist mal der Code:
Code: [AUSKLAPPEN]
Graphics3D 640,480,0,2
SetBuffer BackBuffer()

main_cam=CreateCamera()
CameraViewport main_cam,0,0,640,480

main_light=CreateLight(2,main_cam)
LightRange main_light,50

Global objekt=LoadAnimMesh("Figur_Ani2.b3d")
objekt_y=0

PositionEntity main_cam,0,0,0

PositionEntity main_cam,0,0,-1.5


   ExtractAnimSeq objekt,1,8
   ExtractAnimSeq objekt,9,13

anim_speed#=0.0
sprung_timer = 0


Repeat

   If KeyDown(30)      ;forward
   

   
      If anim_speed<=0
         anim_speed=0.05
         Animate objekt,1,anim_speed
      EndIf

   Else If KeyDown(44)   ;backward
      If anim_speed>=0
         anim_speed=-0.05
         Animate objekt,1,anim_speed
      EndIf

   Else    ;stop animating
      
      anim_speed=0
      Animate objekt,0,anim_speed=0

   EndIf



If KeyHit(57) And objekt_y<1 And objekt_y>-1 Then

Animate objekt, 0, 0.02 ,0.51

EndIf


If objekt_y > 0 Then
objekt_y = objekt_y -1
EndIf



    If KeyDown(203) Then TurnEntity objekt,0,2,0
    If KeyDown(205) Then TurnEntity objekt,0,-2,0
    UpdateWorld()
    RenderWorld()
    Text 0,0,"Benutze Pfeiltasten und -A- und -Y-!"

Flip
Until KeyHit(1)
End




Mfg. Kurzer & Denny

The_Nici

BeitragMi, Jan 02, 2008 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
So, du gibts die Sequenz bei Animate garnicht an. :O

http://www.blitzbase.de/befehle3d/animate.htm
 

DennY

BeitragMi, Jan 02, 2008 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
@ The_Nici
Danke, nach eingehenderen Studien auf BlitzBase.de haben wir es dann rausgefunden.

Code: [AUSKLAPPEN]

..............
;die Teilanimation entpacken
 Ani_Run   =    ExtractAnimSeq (objekt,1,8)
 Ani_Jump   =      ExtractAnimSeq (objekt,8,13)

Repeat

   If KeyDown(30)      ;forward
   
   If anim_speed<=0
         anim_speed=0.05
         Animate objekt,1,anim_speed, Ani_Run, 2
   EndIf

   Else If KeyDown(44)   ;backward
      If anim_speed>=0
         anim_speed=-0.05
         Animate objekt,1,anim_speed, Ani_Run, 2
   EndIf

   Else If KeyDown(57)  Then   ;jump
      
      If anim_speed>=0
         anim_speed=-0.05
         Animate objekt,3,0.05, Ani_Jump, 2
      EndIf



   Else    ;stop animating
      
      anim_speed=0
      Animate objekt,0,anim_speed=0

   EndIf


    UpdateWorld()
    RenderWorld()

Flip
Until KeyHit(1)
End


Wir haben auch garnicht beachtet, dass
Code: [AUSKLAPPEN]
ExtractAnimSeq
einen Wert zurückliefert.
 

Kurzer

BeitragFr, Jan 04, 2008 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Ich bins mal wieder! =)
Ich habe mal wieder ein kleines Problem mit einer Animation. Eigendlich ist es kein richtiges Problem, es ist eher ein Schönheitsfehler.
Wenn die Spielfigur sich aus dem Stand dreht, so trampelt sie ein bisschen auf dem Boden rum, das Problem ist jetzt aber, dass sie, wenn sie die Animation neustarten soll (weil die Spielfigur sich ja weiterdreht), beginnt sie plötzlich ruckartig. Ich nehme an, dass liegt an de"Wartezeit" zwischen den Animationswiedergaben. Kann man dieses Effekt irgendwie wegmachen?
Hier ein kleiner Codeausschnitt:

Code: [AUSKLAPPEN]
   Else If KeyDown(203)      ;left
   
TurnEntity objekt,0,1.5,0
   
      If anim_speed<=0
         anim_speed=0.1
         Animate objekt,1,anim_speed, Ani_Turn, 0
      EndIf
 

Kurzer

BeitragSo, Jan 06, 2008 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich hab mir das nochmal genau angeguckt, und mir ist aufgefallen, das beim 2. Abspielen jede Animationen (auch laufen) ruckartig beginnt ... wie kann man das nur machen, das die schön hinterienader abgespielt werden ohne diese "Ruckler"?

Achja: Das ändern des Parameters von 'Animate' bewirkt gar nix ...

FreetimeCoder

BeitragSo, Jan 06, 2008 8:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Heyho,

Ich weiß nicht ob ihr drauf geachtet habt, aber in Blender habt ihr die Ani

gesamt: 1-13
ani1: 1-8
ani2: 8-13

in BB wäre das dann:
gesamt: 0-12
ani1: 0-7
ani2: 7-12

Das liegt daran, das Blender den frame 0 nicht kennt und immer bei 1 anfängt. Der Exporter setzt alles einen frame "zurück" (oder BB, ich weiß es nicht) Also fanen alle Animationen einen Frame früher an.
Da liegt das Problem: Beim Loop wird immer ein frame von einer falschen Animation gespielt. Einfach die Werte anpassen. Dann sollte es funktionieren.
(Hatte letztens das selbe Problem Wink)
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte:
Dexterity Ball (100%)
Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz
(ehemals Uboot)
PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA
 

Kurzer

BeitragMo, Jan 07, 2008 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
FreetimeCoder hat Folgendes geschrieben:
Heyho,

Ich weiß nicht ob ihr drauf geachtet habt, aber in Blender habt ihr die Ani

gesamt: 1-13
ani1: 1-8
ani2: 8-13

in BB wäre das dann:
gesamt: 0-12
ani1: 0-7
ani2: 7-12

Das liegt daran, das Blender den frame 0 nicht kennt und immer bei 1 anfängt. Der Exporter setzt alles einen frame "zurück" (oder BB, ich weiß es nicht) Also fanen alle Animationen einen Frame früher an.
Da liegt das Problem: Beim Loop wird immer ein frame von einer falschen Animation gespielt. Einfach die Werte anpassen. Dann sollte es funktionieren.
(Hatte letztens das selbe Problem Wink)


Danke, das war das Problem! Du hast mir (uns) sehr geholfen Wink

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group