I want to create a way for my player to die in the game, when they reach 0 health, I want them to have an animation play (And either repeat a set number of times or play for a set amount of time) and then the program to close (for now, until i make a menu) but I don’t know how to do that. This is the code I have at the moment, and it just closes the program as soon as the player reaches 0 health.
if playerHealth == 0 then
msg.post(".", “release_input_focus”)
play_animation(self, hash(“Death”))
os.exit()
end
I assume you are talking about a flipbook animation?
It has a nice callback function when the animation has completed.
sprite.play_flipbook("#sprite", "death", function() os.exit() end)
I don’t use the flipbook animation stuff, I just use play_animation which works fine
sure it works fine, but as you said u need more control over the animation so you will need to look elsewhere. And thats why defold has something like flipbook.
play_animation is just for playing the animation, basically fire and forget
edit:
ok im honest here, until now i didn’t even know there is something like play_animation() in defold. I assume its just a sugary way for msg.post("#sprite", "play_animation",...)
?
if so, than you could also use on_message for checking the completion of the animation.
But imo thats kind of an ugly way to handle this.
I’m guessing play_animation
here is a function you’ve defined that looks something like this:
local function play_animation(self, animation)
if animation ~= self.current_animation then
sprite.play_flipbook("#sprite", animation)
self.current_animation = animation
end
end
It’s important to note that this code doesn’t stop to let the animation finish, so your call to os.exit()
will always run immediately. Luckily sprite.play_flipbook()
can also take a function to run when the animation completes. Adding that to your code:
local function play_animation(self, animation, complete_function)
if animation ~= self.current_animation then
sprite.play_flipbook("#sprite", animation, complete_function)
self.current_animation = animation
end
end
if playerHealth == 0 then
msg.post(".", "release_input_focus")
play_animation(self, hash("Death"), function()
os.exit()
end)
end
Now os.exit()
will run when the Death
animation finishes.
Nevermind, I’ve figured out how to get flipbook to work, i’ve just been typing it wrong.
How do I get it to play a certain number of times though?
I want the animation to play 3 times before it finishes