Blitz3D+ Command Reference

AnimSpeed# ( entity )

Parameters

entity - entity handle

Description

Returns the playback speed of an entity current animation.

The value is in animation frames per UpdateWorld step, the same units Animate and SetAnimSpeed use. Reading it back lets you nudge a speed relative to whatever it is now - SetAnimSpeed e,AnimSpeed(e)*1.5 to wind a run cycle up - without having to track the number yourself.

Two things to expect. Ping-pong playback flips the sign when the animation reverses, so the value goes negative on the backwards leg; take Abs() if you only care about the rate. And during a true crossfade this reports the speed of the incoming clip, the one being blended towards.

A speed of 0 means playback is paused - the entity is still on its sequence and will carry on when you give it a non-zero speed again.

See also: SetAnimSpeed, Animate, AnimTime, Animating, CrossFadeAnim.

Example

; AnimSpeed Example
; -----------------

Graphics3D 640,480,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,2,-6
RotateEntity camera,12,0,0

light=CreateLight()
RotateEntity light,45,45,0

; A grassy paddock for the fox to roam
ground=CreatePlane()
EntityTexture ground,LoadTexture("media/MossyGround.BMP")

; Load the rigged fox; it has the named clips "Survey", "Walk" and "Run"
fox=LoadAnimMesh("../../../samples/glTF/assets/Fox/Fox.glb")
If fox=0 Then RuntimeError "Could not load Fox.glb: "+ModelLoadError()

; Shrink the fox to game scale (the file is modelled about 100 units tall)
FitMesh fox,-0.8,0,-0.8,1.6,1.6,1.6,True

; Play the walk clip ping-pong so it reverses at each end
walk=FindAnimSeq(fox,"Walk")
CrossFadeAnim fox,walk,0,2

speed#=1

While Not KeyDown(1)

    ; Change the playback speed with [ and ]
    If KeyDown(26) And speed>0.1 Then speed=speed-0.01 : SetAnimSpeed fox,speed
    If KeyDown(27) And speed<4 Then speed=speed+0.01 : SetAnimSpeed fox,speed

    UpdateWorld

    ; Arrow keys move the camera
    If KeyDown(200) Then MoveEntity camera,0,0,0.1
    If KeyDown(208) Then MoveEntity camera,0,0,-0.1
    If KeyDown(203) Then TurnEntity camera,0,1,0
    If KeyDown(205) Then TurnEntity camera,0,-1,0

    RenderWorld

    Text 0,0,"[ / ]: change speed   Arrows: camera   Esc: exit"
    ; AnimSpeed returns the live speed; ping-pong playback flips its sign
    ; whenever the walk cycle reverses direction
    Text 0,20,"AnimSpeed(fox) = "+AnimSpeed(fox)
    Text 0,40,"AnimTime: "+AnimTime(fox)

    Flip

Wend

End

Index