0 votes

I'm making a 2D platformer and it was all working fine but when I restarted Godot, it somehow messed up, the idle and run animations aren't playing anymore, I checked the code and everything is working but when I play the scene, the idle and run animations aren't playing...

This is the player script:

extends KinematicBody2D
class_name Player

enum { MOVE, IN_AIR }



export(Resource) var moveData

var double_jump = 1
var speed = Vector2.ZERO
var state = MOVE

func _physics_process(delta):
    var input = Vector2.ZERO
    input.x = Input.get_axis("ui_left", "ui_right")
    input.y = Input.get_axis("ui_up", "ui_down")

    match state:
        MOVE: move_state(input)
        IN_AIR: air_state(input)



func move_state(input):

    apply_gravity()
    if speed.y > 0:
        $AnimatedSprite.animation = "Fall"
        speed.y += moveData.AdditionalFallGravity

    if input.x == 0:
        apply_friction()
        $AnimatedSprite.animation = "Idle"
        print("idle")
    else:
        apply_acceleration(input.x)
        $AnimatedSprite.animation = "Run"
        print("run")
        if $DustTimer.is_stopped() and is_on_floor():
            $Particles2D.emitting = true
#           $DustTimer.start($Particles2D.lifetime + 0.1)
        if input.x > 0:
            $AnimatedSprite.flip_h = false
            $Particles2D.set_rotation_degrees(180)
        elif input.x < 0:
            $AnimatedSprite.flip_h = true
            $Particles2D.set_rotation_degrees(0)


    if is_on_floor():
        double_jump = moveData.DoubleJumpCount
        if Input.is_action_just_pressed("ui_up"):
            speed.y = moveData.JumpForce
    else:
        $AnimatedSprite.animation = "Jump"
        if Input.is_action_just_released("ui_up") and speed.y < moveData.JumpReleaseForce:
            speed.y = moveData.JumpReleaseForce

        if Input.is_action_just_pressed("ui_up") and double_jump > 0:
            speed.y = moveData.JumpForce
            double_jump -= 1
            state = IN_AIR


        if speed.y > 0:
            speed.y += moveData.AdditionalFallGravity

    var was_in_air =  not is_on_floor()
    speed = move_and_slide(speed, Vector2.UP)
    var just_landed = is_on_floor() and was_in_air
    if just_landed:
        $AnimatedSprite.animation = "Run"
        $AnimatedSprite.frame = 1


func air_state(input):
    $AnimatedSprite.animation = "Double_Jump"
    print("double jump")
    if double_jump < 1:
        state = MOVE
        print("moved to state")



func apply_gravity():
    speed.y += moveData.Gravity
    speed.y = min(speed.y, 300)
func apply_friction():
    speed.x = move_toward(speed.x, 0, moveData.Friction)


func apply_acceleration(amount):
    speed.x = move_toward(speed.x, moveData.MaxSpeed * amount, moveData.Acceleration)
Godot version 3.5.1
in Engine by (12 points)

Think you must use $AnimatedSprite.play(ANIMATIONNAME) instead of a $AnimatedSprite.animation = ANIMATIONNAME

Please log in or register to answer this question.

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read Frequently asked questions and How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to [email protected] with your username.