Some help with b3d animations, please?
Blitz3D Forums/Blitz3D Programming/Some help with b3d animations, please?| 
 | ||
| heyo, I'm having some trouble with changing animations [between Idle, Walk and Run]. My code is a follows: This works fine, but all it does is animates an Idle animation when standing still and walking when [W] is depressed. I tried to add a third sequence with: This doesn't work, it changes between animations but doesn't stop animating when the button is released. I also tried to add a variable "seq%" in my For/next loop where I animate the root node. eg. but altering the "seq%" outside of the function didn't change the animseq. And if I tried to put "If Keydown()" in the function I get an error. Any Help would be appreciated. Any Ideas? | 
| 
 | ||
| Hello, I don't have time to correct your code but i used these commands, this way : ;to load the animations of the character : 
HumanMaleXMesh = LoadAnimMesh("Cosmonaut MaterialedRiggedAnimated 2012.04.03 14h49m.b3d")
ScaleEntity(HumanMaleXMesh,0.099,0.099,0.099)
PositionEntity(HumanMaleXMesh,0,0,0)
HideEntity(HumanMaleXMesh)
Global HumanMaleSeqStandIdle = ExtractAnimSeq(HumanMaleXMesh,1,1)
Global HumanMaleSeqRunForward = ExtractAnimSeq(HumanMaleXMesh,5,21)
Global HumanMaleSeqRunBackWard = ExtractAnimSeq(HumanMaleXMesh,5,21)
Global HumanMaleSeqJump = ExtractAnimSeq(HumanMaleXMesh,39,43)
Global HumanMaleSeqFall = ExtractAnimSeq(HumanMaleXMesh,43,43)
;Global HumanMaleSeqLandGravityLow = ExtractAnimSeq(HumanMaleXMesh,43,66)
Global HumanMaleSeqLand = ExtractAnimSeq(HumanMaleXMesh,43,66)
;Global HumanMaleSeqLandGravityHigh = ExtractAnimSeq(HumanMaleXMesh,43,66)
Global HumanMaleSeqPickUpItem = ExtractAnimSeq(HumanMaleXMesh,43,66)
;to init the different possible states : ;PositionState Const OnGround% = 30 Const OnAir% = 31 Const OnWall% = 32 ;MovementState ; OnGround Const Idle% = 40 Const WalkForward% = 41 Const WalkBackward% = 42 Const RunForward% = 43 Const RunBackward% = 44 ;Const SprintForward% = 45 ;Const SprintBackward% = 46 ;Const CrouchForward% = 47 ;Const CrouchBackward% = 48 ;Const SlideForward% = 49 ;Const SlideBackward% = 50 Const Jump% = 51 ;Const Interact% = 52 ;(interuptor, Handle, furniture, Object, weapon, device, vehicle, character) ;Const Fight% = 53 ; OnAir Const Fall% = 54 Const Land% = 55 ;(slow, average, fast) ; OnWall Const Grab% = 56 ;(knee height, hip height, shoulder height, hands above head height) Const Climb% = 57 ;(flat platform,ladder, grid, net, gouti�re, poteau, trunk, rope, cable) Const Letgo% = 58 ;to update the animations depending on the character state: 
For ChaId% = 1 To CharactersCount%
  If(CharacterPositionState%(ChaId%) = OnWall%)
   ;
  ElseIf(CharacterPositionState%(ChaId%) = OnGround%)
   RotateEntity(CharacterFeet(ChaId%),0,CharacterYaw#(ChaId%),0)
   If(CharacterMovementState%(ChaId%) = Idle%)
    CharacterMovementSpeed#(ChaId%) = 0
    ;Seq StandIdle
    If(AnimSeq(CharacterMesh(ChaId%)) <> HumanMaleSeqStandIdle)
     Animate(CharacterMesh(ChaId%),1,0.1*SpeedCoeff#,HumanMaleSeqStandIdle)
    EndIf
   ElseIf(CharacterMovementState%(ChaId%) = RunForward%)
    CharacterMovementSpeed#(ChaId%) = 0.1*SpeedCoeff#
    ;Seq RunForward
    If(AnimSeq(CharacterMesh(ChaId%)) <> HumanMaleSeqRunForward)
     Animate(CharacterMesh(ChaId%),1,0.2*SpeedCoeff#,HumanMaleSeqRunForward)
    EndIf
   ElseIf(CharacterMovementState%(ChaId%) = RunBackward%)
    CharacterMovementSpeed#(ChaId%) = -0.1*SpeedCoeff#
    ;Seq RunBackward
    If(AnimSeq(CharacterMesh(ChaId%)) <> HumanMaleSeqRunBackward)
     Animate(CharacterMesh(ChaId%),1,0.2*SpeedCoeff#,HumanMaleSeqRunBackward)
    EndIf
   ElseIf(CharacterMovementState%(ChaId%) = Jump%)
    CharacterJumpState%(ChaId%) = 1
    CharacterJumpSpeed#(ChaId%) = 0.2*SpeedCoeff#  
    ;Seq Jump
    If(AnimSeq(CharacterMesh(ChaId%)) <> HumanMaleSeqJump)
     Animate(CharacterMesh(ChaId%),3,0.2*SpeedCoeff#,HumanMaleSeqJump)
    EndIf 
   ElseIf(CharacterMovementState%(PId%) = Land%)
    ;Seq Land	
    If(AnimSeq(CharacterMesh(ChaId%)) <> HumanMaleSeqLand)
     Animate(CharacterMesh(ChaId%),3,1.0*SpeedCoeff#,HumanMaleSeqLand)
    EndIf
    If(AnimTime(CharacterMesh(ChaId%)) = 23)			
     CharacterLandState%(ChaId%) = 0
    EndIf	 
   EndIf
  ElseIf(CharacterPositionState%(ChaId%) = OnAir%)
   TranslateEntity(CharacterFeet(ChaId%),CharacterVX#(ChaId%),0,CharacterVZ#(ChaId%))
   CharacterGravitySpeed#(ChaId%) = CharacterGravitySpeed#(ChaId%) - Gravity#*SpeedCoeff#
   CharacterVY#(ChaId%) = CharacterJumpSpeed#(ChaId%) + CharacterGravitySpeed#(ChaId%)
   TranslateEntity(CharacterFeet(ChaId%),0,CharacterVY#(ChaId%),0)
   ;Seq Fall
    If(AnimSeq(CharacterMesh(ChaId%)) <> HumanMaleSeqFall)
     Animate(CharacterMesh(ChaId%),3,1.0*SpeedCoeff#,HumanMaleSeqFall)
    EndIf
  EndIf
 Next
Please note this is an old code, so it can probably be improved but maybe it can help you. PS : forget about the symbols "%" "#" "$", they are needed only when you create a new variable but not everywhere like in this code, this is an old bad habit that i had. Last edited 2013 |