More than 1 Idle Animation

4.4

how to code Idle animation to play Idle 2 and 3 depending on how much time player’s Idle?

Accumulate player’s idle time and when it crosses a certain threshold - switch to next animation.

Ok how?

func _idle_state():
	print("Idle")
	animated_sprite.play("Idle")
	$Ground.disabled = false
	$AirHover.disabled = true
	$AirForward.disabled = true
	if Input.is_action_just_pressed("Fly"):
		velocity.y = JUMP_VELOCITY
		current_state = States.FLYING
	if Input.is_action_just_pressed("Interact"):
		for area in $InteractZone.get_overlapping_areas():
			if area.has_method("on_interact"):
				area.on_interact(self)
		current_state = States.INTERACTING
	elif Input.is_action_pressed("EnterCall"):
		current_state = States.TALKING

Who and when calls _idle_state()?

If the animations are always played in the same sequence, then you can combine them into a single idle animation.

When Player speed is 0 and is on Ground

issue with that i will have to extend Normal Idle animation Frames alot

That’s when. Now who does it?

A simple generalized solution would be to just tween the sequence of animations. As soon as player touches controls - cancel the tween.

func _ready(): Call Idle State when game Start

func _ready():
states[States.IDLE].call()

You can do it with a tween as I mentioned above.

that works with animatedSprite2d?

It works with anything. Sequence the play() calls using tween_callback() and tween_interval()

Thanks, i will go to documents to learn about tween and how it works

1 Like

They have to go somewhere. Whether they’re spread over many small animations or a single large animation is usually just a personal preference. They are the same either way, unless you need to reuse the animations elsewhere.

ye this could work too

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.