Animation Probs

Blitz3D Forums/Blitz3D Beginners Area/Animation Probs

Hi,
i have an animated Raptor loaded with "LoadAnimMesh" and
added AnimSequences with "LoadAnimSeq".
First i animate the Raptor with this:
Animate raptor,1,0.4,2,1.
Now i shoot at the Raptor and countdown a raptorhealth variable(from 100).
If the Variable=0 the Raptor should play another AnimSequence. But after the Raptorhealth Variable reaches 0
the first Anim stops and if i shoot one more time (raptorhealth=-10) the next animseq is playing. Why this?

If raptorhealth=0 ;Animation Stops - if raptorhealth is -10
;the next animation plays
Animate raptor,3,0.4,3,0
;EntityAlpha raptor,0.5
;HideEntity raptor
;PlaySound(raptordie)
ChannelVolume raptorchannel,0
EndIf

Thank you

I'd have to see the rest of your code to be sure but it looks like you are calling the Animate command every frame while raptorhealth=0. What you want is to only call Animate once to start playing the animation. In other words have your If statement check if the animation is already playing.

Ok,
Here is the whole Code without Includes, can you please
look at it? Thank you.
Include "functions.bb"
Include "constants.bb"
Include "types.bb"
Include "globals.bb"

Graphics3D 1024,768,32
SetBuffer BackBuffer()

HidePointer() ; löscht mauszeiger im windows-modus

Collisions COLLISION_PLAYER,COLLISION_OBSTICLE,2,2
Collisions COLLISION_BULLET,COLLISION_OBSTICLE,2,1
Collisions COLLISION_BULLET,COLLISION_RAPTOR,2,1
Collisions COLLISION_PLAYER,COLLISION_RAPTOR,2,2

;setup lighting
;Global light=CreateLight()
;RotateEntity light,45,45,0
;LightColor light,126,126,126
;AmbientLight 70,70,70


;himmel
Global skytexture=LoadTexture("textures/myclouds1.bmp")
ScaleTexture skytexture,4000,4000
Global skyplane1=CreatePlane()
PositionEntity skyplane1,0,400,0
EntityTexture skyplane1,skytexture
;FreeTexture skytexture - nicht freigeben, wird zur bewegung gebraucht
RotateEntity skyplane1,0,0,180
EntityFX skyplane1,8
;EntityBlend skyplane1,4
EntityType skyplane1,COLLISION_OBSTICLE
EntityPickMode skyplane1,2

;boden
plane=CreatePlane()
EntityType plane,COLLISION_OBSTICLE
EntityPickMode plane,2

Global grass_tex=LoadTexture( "textures/gras_1.bmp");terrain-1.jpg" )
EntityTexture plane,grass_tex
FreeTexture grass_tex

;player
player=CreatePivot() ; pivot fuer kamera = player
EntityRadius player,0.85 ; radius fuer kollision
PositionEntity player,0,0.85,0 ; eyes height
EntityType player,COLLISION_PLAYER

;camera
camera=CreateCamera(player) ; kamera an pivot binden
TranslateEntity camera,0,0.85,0
CameraRange camera,0.2,4000
CameraFogMode camera,1
CameraFogRange camera,1,80
CameraFogColor camera,100,110,100
CameraClsColor camera,100,100,110
ears=CreateListener(camera)

backgrsound=LoadSound("sounds/wind.wav")
LoopSound backgrsound
PlaySound backgrsound

raptorwav=Load3DSound("sounds/db_growler2.wav")
raptordie=Load3DSound("sounds/db_runtaur.wav")

gunfire=LoadSound("sounds/db_gun1.wav")
jumpsound=LoadSound("sounds/jump.wav")

fort=LoadMesh("models/fort1.3ds")
EntityType fort,COLLISION_OBSTICLE
PositionEntity fort,5,0,0
EntityPickMode fort,2

;Global raptor2=LoadMesh("models/L-Thug-Attack1.x")
;EntityType raptor2,COLLISION_RAPTOR
;PositionEntity raptor2,-10,0,0
;EntityPickMode raptor2,2

raptor=LoadAnimMesh("models/raptor_static.3ds")
LoadAnimSeq(raptor,"models/raptor_attack.3ds")
LoadAnimSeq(raptor,"models/raptor_idle.3ds")
LoadAnimSeq(raptor,"models/raptor_die.3ds")
LoadAnimSeq(raptor,"models/raptor_move.3ds")
LoadAnimSeq(raptor,"models/raptor_impact.3ds")
EntityType raptor,COLLISION_RAPTOR,True ; ohne True keine Kollision bei AnimMeshes
ScaleEntity raptor,1.1,1.1,1.1
PositionEntity raptor,20,0.1,10
EntityRadius raptor,1.5
EntityPickMode raptor,2

LoopSound raptorwav
raptorchannel=EmitSound(raptorwav,raptor)

Animate raptor,1,0.4,2,1

mp5.gun = New gun ; create a new gun (mp5)
mp5\gun_handle = LoadMesh("models/mp5.3ds",camera) ;waffe gunpivot zugeordnet
ScaleEntity mp5\gun_handle,1.2,1.2,1.2 ; scale mp5-gun
mp5\gun_x# = 0.15 ; set gun coordinates
mp5\gun_y# = -0.22
mp5\gun_z# = 0.33
PositionEntity mp5\gun_handle,mp5\gun_x#,mp5\gun_y#,mp5\gun_z#
TurnEntity mp5\gun_handle,0,4,5
mp5\gun_pivot = CreatePivot(mp5\gun_handle) ; pivot for the mp5-gun
PositionEntity mp5\gun_pivot,0,0,0.2

colt.gun = New gun ; create a new gun (colt)
colt\gun_handle = LoadMesh("models/colt.3ds") ;waffe gunpivot zugeordnet
ScaleEntity colt\gun_handle,1.8,1.8,1.8
colt\gun_x# = 10 ; set gun coordinates
colt\gun_y# = 0.5
colt\gun_z# = 10
PositionEntity colt\gun_handle,colt\gun_x#,colt\gun_y#,colt\gun_z#
TurnEntity colt\gun_handle,0,4,0

muzzle1=LoadSprite("textures/muzzleflash_front_2.jpg",2,mp5\gun_pivot)
PositionEntity muzzle1,0,0.1,0.4
ScaleSprite muzzle1,0.2,0.2
EntityAlpha muzzle1,0.0
EntityFX muzzle1,1

Global mousepointer=LoadSprite("textures/my_crosshair_2.bmp",2,camera)
PositionEntity mousepointer,0.008,-0.013,1.5;0.8
ScaleSprite mousepointer,0.02,0.02
EntityBlend mousepointer,3 ; macht crosshair besser sichtbar, auch in der Entfernung


mypanelleft=LoadImage("textures/mypanel_left.bmp")
MaskImage mypanelleft,0,0,0

sniperpanel=LoadImage("textures/sniper.tga")


While Not KeyDown( 1 )

;Framecounter_nur fuer FPS-Anzeige
Framecounter_counter=Framecounter_counter+1
If Framecounter_time=0 Then Framecounter_time=MilliSecs()
If Framecounter_time+1001 <MilliSecs() Then
Framecounter_framerate=Framecounter_counter
Framecounter_counter=0
Framecounter_time=MilliSecs()
EndIf
;End Framecounter


If KeyHit(17)= True Then enable=1 - enable ; W-Taste ist wireframe
WireFrame enable


Repeat
elapsed=MilliSecs()-time
Until elapsed

ticks=elapsed/period

tween#=Float(elapsed Mod period)/Float(period)

; --------------------------------------------------------------
; Update game and world state
; --------------------------------------------------------------

For k=1 To ticks

time=time+period
If k=ticks Then CaptureWorld
UpdateGame ()
UpdateWorld

Next

RenderWorld tween#

; 2D drawing
DrawImage mypanelleft,20,GraphicsHeight()-40

If MouseDown(2)
DrawImage sniperpanel,0,0
CameraZoom camera,3
HideEntity mousepointer
Else
CameraZoom camera,1
ShowEntity mousepointer
EndIf

;Text GraphicsWidth()/2,GraphicsHeight()/2,"+"
;Text 10,0,"y-achse: " +cy
;Text 10,20,"x-achse: " +cx
Text 10,40,"Hoehe: "+EntityY(player)
Text 10,80,"fps: "+Framecounter_framerate
Text 10,120,"raptorhealth "+raptorhealth
; end 2D drawing

Flip

Wend

End

Function UpdateGame()

rot#=rot#+0.7 ; rotate colt
RotateEntity colt\gun_handle,0,rot#,0 ; rotate colt
;MoveEntity colt\gun_handle,0,(Rnd(0,0.1)),0


skytex_x#=skytex_x# + .0002 ;wolken bewegen
PositionTexture skytexture,skytex_x#,0 ;wolken bewegen

;jumping
If jumping=0
If KeyDown(57) Then yvel#=jumpvel# ; leertaste
If KeyDown(57) =True Then PlaySound(jumpsound)
jumping=1
gravity#=0.09 ; verringert gravity, player kann hoeher springen
EndIf

If jumping=1
yvel#=yvel#-jumpgravity#
by#=by#+yvel#
EndIf

If by#<1 Then by#=1 yvel#=0 jumping=0 gravity#=0.3

;speed#=speed# * .99
TranslateEntity player,0,yvel#,speed#
;end jumping


If KeyDown( 205 )=True Then MoveEntity player,backwardspeed#,0,0 ;right arrow key
If KeyDown( 203 )=True Then MoveEntity player,-backwardspeed#,0,0 ;left arrow key
If KeyDown( 208 )=True Then MoveEntity player,0,0,-backwardspeed# ; down arrow key
If KeyDown( 200 )=True Then MoveEntity player,0,0,forwardspeed# ; up arrow key

;mit shift-taste
If KeyDown( 205 ) And KeyDown(54) = True Then MoveEntity player,backwardspeed#/2,0,0 ;right arrow key
If KeyDown( 203 ) And KeyDown(54) = True Then MoveEntity player,-backwardspeed#/2,0,0 ;left arrow key
If KeyDown( 208 ) And KeyDown(54) = True Then MoveEntity player,0,0,-backwardspeed#/2 ; down arrow key
If KeyDown( 200 ) And KeyDown(54) = True Then MoveEntity player,0,0,forwardspeed#/2 ; up arrow key

;kriechen
If KeyDown(157) = True
PositionEntity camera,0,0.2,0 ; eyes height
Else
PositionEntity camera,0,1,0
EndIf ; kriechen ende

;mouselook
cx=(cx-(MouseX()-(GraphicsWidth()/2))) Mod 360
cy=(cy+(MouseY()-(GraphicsHeight()/2))) Mod 360

If cy<-90 Then cy=-90
If cy>80 Then cy=80

RotateEntity player,cy,cx,0

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 ; muss hier stehen, sonst unter 360 Grad

TranslateEntity player,0,-gravity#,0 ; gravity
;end mouselook

If raptorhealth=0
Animate raptor,3,0.4,3,0
;EntityAlpha raptor,0.5
;HideEntity raptor
;PlaySound(raptordie)
ChannelVolume raptorchannel,0
EndIf

If MouseHit(1)=True

target=CameraPick(camera,GraphicsWidth()/2,GraphicsHeight()/2)
mytarget=CreatePivot()
PositionEntity mytarget,PickedX(),PickedY(),PickedZ()

shootbullet()

PlaySound(gunfire)
EntityAlpha muzzle1,0.9
Else
EntityAlpha muzzle1,0.0
EndIf

updatebullets()

Any Help, please?
Thanks

Have you checked what I mentioned above? When I said I would need to see the rest of your code to be sure I didn't mean I want to (frankly I don't have time) but that I'm not 100% sure. Still it strikes me as a pretty likely reason for your problem: instead of calling Animate just once to start playing the animation, you call it every frame raptorhealth=0 (which is every frame until it is hit again) thus resetting the animation every frame.

Thank you for your help jhocking.

I will rewrite the complete code,
because i have found another bug that makes me crazy.
Some Codepieces are grabbed from the Forum and the Archives.
But i will understand every single peace of the Code, so i
am starting new.