Howdy, Stranger!

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

tween.pair() (also a question)

Hello, World!

While working on a project I wanted a way to trigger two or more tweens at once in a sequence. The following function is my solution. I am sure the following has been done before but searched already to find no results.


-- Trigger two or more tweens at once in a sequence

-- Syntax:
-- tween.pair({t1, t2, t3...})

function tween.pair(tweens)
    for i,t in pairs(tweens) do
        tween.sequence(t)
    end
end

I know using tween.sequence() is not exactly the most creative aproach, but I don't fully understand how tweens work and it seemed the easiest way to me. I am open for better ways to do this.

I also wanted to make the syntax simpler using the arg table described in @Ignatz 's book 'Lua for beginners but got an error when I used this. If anyone can explain why or how to fix this I am open for it.

Thanks for reading

Comments

  • SimeonSimeon Admin Mod
    edited January 2017 Posts: 5,025

    Great little function! The variable argument syntax changed in Lua 5.3, there's a thread here:

    https://codea.io/talk/discussion/6330/codea-2-3-lua-5-3/p1

    Here's how you do it:

    function foo(...)
        -- get the number of args
        local n = select('#', ...)
    
        -- make a table out of the args
        local arg = {...}
    
        if n > 0 then
            print(arg[1])
        end
    end
    
  • dave1707dave1707 Mod
    Posts: 7,749

    @jaj_TheDeveloper Here's something I wrote some time ago that shows multiple tweens being started and running at the same time. There are 768 tweens, one for each square. Tap the screen to start them in motion. It's set to run for 15 seconds.

    supportedOrientations(PORTRAIT_ANY)
    displayMode(FULLSCREEN)
    
    function setup()
        spriteMode(CORNER)
        tab={}
        img=readImage("Cargo Bot:Startup Screen")
        w=img.width/24
        h=img.height/32
        for x=1,24 do
            for y=1,32 do  
                table.insert(tab,img:copy((x-1)*32+1,(y-1)*32+1,32,32))
            end
        end
        twTab={}
        count=0
        for x=1,24 do
            for y=1,32 do
                count=count+1
                table.insert(twTab,
                twn(15,math.random(WIDTH),math.random(HEIGHT),
                        (x-1)*32+1,(y-1)*32+1,count))          
            end
        end
    end
    
    function draw()
        background(0)
        for a,b in pairs(twTab) do
            b:draw()   
        end
    end
    
    function touched(t)
        if t.state==BEGAN then
            for a,b in pairs(twTab) do
                b:start()  
            end
        end
    end
    
    twn=class()
    
    function twn:init(t,xs,ys,xe,ye,nbr)
        self.col=color(math.random(255),math.random(255),math.random(255))
        self.starts={x=xs,y=ys}
        self.ends={x=xe,y=ye}
        self.time=t
        self.nbr=nbr
    end
    
    function twn:start()
        tween(self.time,self.starts,self.ends,tween.easing.elasticInInOut)
    end
    
    function twn:draw()
        fill(self.col)
        sprite(tab[self.nbr],self.starts.x,self.starts.y)
    end
    
  • dave1707dave1707 Mod
    Posts: 7,749

    @jaj_TheDeveloper Here's another example for doing multiple arguments.

    function setup()
        xxx("aa","bb","cc","dd","ee")
    end
    
    function xxx(...)
        args={...}
        for a,b in pairs(args) do
            print(a,b)
        end
    end
    
Sign In or Register to comment.