Quick Links: Gideros Home | Download Gideros | Developer Guide
timed sprite animation - Gideros Forums
timed sprite animation
  • I'm fairly new to this stuff, I have just looked at the animation and timers sample. I was wondering how i could combine these two together to create multiple animations that move independently based on different timers or a certain time after the previous sprite has moved? Any help will be much appreciated.
  • You can add a timer to the Bird class (inside the Bird:init method):
       self.timer = Timer.new(20, 0)
     
    self.timer:addEventListener(Event.TIMER, self.onTimer, self)
    self.timer:start()


    Then, instead of changing the current animation frame inside Bird:onEnterFrame, do it inside the timer event:
    function Bird:onTimer()
    self:removeChild(self.frames[math.floor(self.frame)])
    self.frame = self.frame + 0.1
    if self.frame >= self.nframes + 1 then
    self.frame = 1
    end
    self:addChild(self.frames[math.floor(self.frame)])
    end


    Hope this helps.
  • ok thanks i did notice a change but just to check is this wt u meant -
    Bird = gideros.class(Sprite)
     
     
    function Bird:init(frameList)
     
    self.frames = {}
     
    for i = 1, #frameList do
    self.frames[i] = Bitmap.new(TextureRegion.new(Texture.new(frameList[i])))
    end
     
    self.nframes = #frameList
     
    -- to find the bounding box we add all childs and then remove them
    for i = 1, #self.frames do
    self:addChild(self.frames[i])
    end
     
    local width = self:getWidth()
    local height = self:getHeight()
     
    for i = 1, #self.frames do
    self:removeChild(self.frames[i])
    end
     
     
    for i = 1, #self.frames do
    self.frames[i]:setX(-width/2)
    self.frames[i]:setY(-height/2)
    end
     
     
    self.frame = 1
    self:addChild(self.frames[1])
     
    self:setX(540)
    self:setY(math.random(160) + 40)
     
    self.speedy = math.random(-1000,1000)/1000
     
    self:addEventListener(Event.ENTER_FRAME, self.onEnterFrame, self)
     
    self.timer = Timer.new(20, 0)
    function Bird:onTimer()
    self:removeChild(self.frames[math.floor(self.frame)])
    self.frame = self.frame + 0.1
    if self.frame >= self.nframes + 1 then
    self.frame = 1
    end
    self:addChild(self.frames[math.floor(self.frame)])
    end
    self.timer:addEventListener(Event.TIMER, self.onTimer, self)
    self.timer:start()
    end
     
     
    function Bird:onEnterFrame()
    self:removeChild(self.frames[math.floor(self.frame)])
    self.frame = self.frame + 0.1
    if self.frame >= self.nframes + 1 then
    self.frame = 1
    end
    self:addChild(self.frames[math.floor(self.frame)])
     
    local x = self:getX()
    local y = self:getY()
     
    if (y > 300) then self.speedy = 2 * self.speedy end
    if (y < 10) then self.speedy = -2 * self.speedy end
     
     
    x = x - 3
    y = y + self.speedy
     
    if (x < -10) then
    x = 540
    y = (math.random(160) + 40)
    end
    print(x, y)
     
    self:setX(x)
    self:setY(y)
     
    end


  • This was what I meant
    Bird = gideros.class(Sprite)
     
     
    function Bird:init(frameList)
     
    self.frames = {}
     
    for i = 1, #frameList do
    self.frames[i] = Bitmap.new(TextureRegion.new(Texture.new(frameList[i])))
    end
     
    self.nframes = #frameList
     
    -- to find the bounding box we add all childs and then remove them
    for i = 1, #self.frames do
    self:addChild(self.frames[i])
    end
     
    local width = self:getWidth()
    local height = self:getHeight()
     
    for i = 1, #self.frames do
    self:removeChild(self.frames[i])
    end
     
     
    for i = 1, #self.frames do
    self.frames[i]:setX(-width/2)
    self.frames[i]:setY(-height/2)
    end
     
     
    self.frame = 1
    self:addChild(self.frames[1])
     
    self:setX(540)
    self:setY(math.random(160) + 40)
     
    self.speedy = math.random(-1000,1000)/1000
     
    self:addEventListener(Event.ENTER_FRAME, self.onEnterFrame, self)
     
    self.timer = Timer.new(20, 0)
     
    self.timer:addEventListener(Event.TIMER, self.onTimer, self)
    self.timer:start()
    end
     
    function Bird:onTimer()
    self:removeChild(self.frames[math.floor(self.frame)])
    self.frame = self.frame + 0.1
    if self.frame >= self.nframes + 1 then
    self.frame = 1
    end
    self:addChild(self.frames[math.floor(self.frame)])
    end
     
    function Bird:onEnterFrame()
    local x = self:getX()
    local y = self:getY()
     
    if (y > 300) then self.speedy = 2 * self.speedy end
    if (y < 10) then self.speedy = -2 * self.speedy end
     
     
    x = x - 3
    y = y + self.speedy
     
    if (x < -10) then
    x = 540
    y = (math.random(160) + 40)
    end
    print(x, y)
     
    self:setX(x)
    self:setY(y)
     
    end

  • oh right haha...thanks for your help mate appreciate it

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook Sign In with Google Sign In with OpenID

In this Discussion

Top Posters