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):

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

    if input.x == 0:
        $AnimatedSprite.animation = "Idle"
        $AnimatedSprite.animation = "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
        elif input.x < 0:
            $AnimatedSprite.flip_h = true

    if is_on_floor():
        double_jump = moveData.DoubleJumpCount
        if Input.is_action_just_pressed("ui_up"):
            speed.y = moveData.JumpForce
        $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.