Hi! I'm new to Lua and game-making. I'm writing a match-three game on Mac with Lua. I wrapped the sprite into a Lua "class" because there will be many sprites on the game board. The three-matched sprites will do a spin animation loop before getting removed. The player can grab a sprite from the tail and move to a different row. So, there are animators for horizontal and vertical movements as well.
I have two problems:
- In the sprite's
update()
function i'm checking every animator/animation's status and callingmoveTo()
orsetImage()
, like
function Candy:update()
if self.dropPopAnimator ~= nil and not self.dropPopAnimator:ended() then
self:moveTo(self.dropPopAnimator:currentValue(), self.y)
end
if self.dropPopAnimator ~= nil and self.dropPopAnimator:ended() then
self:setZIndex(0) -- reset Z-index
end
if self.yAnimator ~= nil and not self.yAnimator:ended() then
self:moveTo(self.x, self.yAnimator:currentValue())
end
if self.animationLoop ~= nil and self.animationLoop:isValid() then
self:setImage(self.animationLoop:image())
end
if self.mergeAnimator ~= nil and not self.mergeAnimator:ended() then
self:moveTo(self.mergeAnimator:currentValue(), self.y)
end
if self.blinker.running and self.blinker.on then
-- print("blinking")
self:setScale(0.9)
else
end
I don't think this is the right way to go
- Animator/animations don't have callbacks. The sprites needs to be removed only after they are matched and the match animation is finished. I'm currently doing this by using a
timer.performAfterDelay(delay, callback)
. But because I need to recursively search the board for new matches right after the previous match is removed, I ended up creating anothertimer
within the callback. This is also creating problems which I don't fully understand yet.
What is the best practice to deal with multiple animator/animations on the sprite? And how to run logic right after an animator/animation is finished? Also, how do I avoid nested timers and callbacks?