Home > Net >  Animation played once godot
Animation played once godot

Time:12-06

I want to play a little Animated Sprite once, I mean only when the scene is visited the first time. I am trying to connect some signals in those ways:

on_scene_ready():
Animated_sprite.play("animation_name")

on_Animated_sprite_animation_finished():
Animated_sprite.hide()

And that's working correctly. But it repeats every time the scene is entered.

I tried a solution found on another forum that seemed to me similar to my issue: put a global variable (but doesn't work and I bet I make it bad)

var has_not_played = true

on_scene_ready():
if has_not_played:
   Animated_sprite.play(animation_name)

on_Animated_sprite_animation_finished():
Animated_sprite.hide()
has_not_played = false 

Any suggestions?

Thanks.

CodePudding user response:

As long as you create a new instance of the scene (what you most likely do, as we can see) your has_not_played variable will always be instanced as true as well. Setting it to false will not help here then.

One simple solution would be to create a autoload script to hold all level informations you need your programm to save, after the scene was exited.

These are infos you most likely want to save as well, when your game is saved.

As an example you could do something like this.

Create a script LevelInfos.gd. Mine looked like this:

extends Node

var level_infos : Dictionary = {
    "level_1" : {
        "start_animation_played" : false
    }
}

Then add this to Project -> project settings -> Autoload with the NodeName LevelInfos.

Now you can reuse your existing code like this:

on_scene_ready():
if not LevelInfos.level_infos["level_1"]["start_animation_played"]:
   Animated_sprite.play(animation_name)

on_Animated_sprite_animation_finished():
Animated_sprite.hide()
LevelInfos.level_infos["level_1"]["has_already_loaded"] = true

This should make it so it only gets played the first time the scene is visited, after you start the game. Code wise I guess it would be better to make dedicated variables instead of using a dictionary, but it works as a example and could be easily saved as an JSON, if needed.

  • Related