Obstacle scrolling function -- Can't figure this one out.

Hey everyone! I just joined Corona a few weeks ago and I recently began development on my own game! I’ve been trying to make some code that will spawn a set screen’s worth of obstacles, scroll them downward, delete them when they go off screen, and repeat the process. I’ve tried loads of different functions and ways of doing this, but I always mess something up. Here’s my most recent attempt (Remember the obstacles that spawn are just for testing)

[lua]function scrollObstacle(specGen)

if specGen.y > 3000 then
specGen:removeSelf()
specGen = nil
else
specGen.y = specGen.y + 10
print(“gotemm”)
end

if specGen.y == nil then
return
end
end

function createNewObstacle()
local generateNum = math.random(1,2)

if generateNum == 1 then
– generate
generated2 = display.newGroup()
local barrel2 = display.newRect(50, 1950, 100, 100)
local barrel3 = display.newRect(50, 50, 100, 100)
local barrel4 = display.newRect(950, 1950, 100, 100)
generated2.y = -2000
generated2:insert(barrel3)
generated2:insert(barrel4)
generated2:insert(barrel2)
local myClosure = function() return scrollObstacle( generated2 ) end
timer.performWithDelay(33, myClosure, 500)
end

if generateNum == 2 then
– generate
generated3 = display.newGroup()
local barrel2 = display.newRect(50, 1950, 100, 100)
local barrel3 = display.newRect(50, 50, 100, 100)
local barrel4 = display.newRect(950, 1950, 100, 100)
barrel2:setFillColor(100,0,0)
barrel3:setFillColor(100,0,0)
barrel4:setFillColor(100,0,0)
generated3.y = -2000
generated3:insert(barrel3)
generated3:insert(barrel4)
generated3:insert(barrel2)
local myClosure = function() return scrollObstacle( generated3 ) end
timer.performWithDelay(33, myClosure, 500)
end

end
createNewObstacle()
timer.performWithDelay(20000/3, createNewObstacle, 0 )

[/lua]

I always come of with some error, whether it’s right away or when the program goes to delete the obstacle. In this code the obstacle’s scrolling speed is different each time and ends up being really weird.

Any suggestions/help/edits to this code would be greatly appreciated =)

[lua]   

local  generated2 = display.newGroup()

local  generated3 = display.newGroup()

local bindex = 0

local barrelTable = {}

local barrelTable1 = {}

local leftSide = display.screenOriginX

local rightSide = display.contentWidth - display.screenOriginX

local topSide = display.screenOriginY

local bottomSide = display.contentHeight - display.screenOriginY

local speed = 10

function scrollObstacle(specGen)

local i = 0 

for i = #barrelTable, 1, -1 do

if barrelTable[i] then

   if barrelTable[i].contentBounds.yMin > bottomSide then

    local z = table.remove(barrelTable, i)

       z:removeSelf()

       z = nil

       print(“removing”, #barrelTable)

       bindex = bindex - 1

   else

        barrelTable[i].y = barrelTable[i].y + speed

   end

end

end

end

function createNewObstacle()

    local generateNum = math.random(1,2)

    speed = speed + 0.1

    if generateNum == 1 then

        local i = 0

        for i = 1, 3 do

      bindex = bindex + 1

      local rndmX = math.random(leftSide, rightSide)

      local r = math.random(0.2, 1)

      local g = math.random(0.2, 1)

      local b = math.random(0.2, 1)

       barrelTable[bindex] = display.newRect(rndmX, topSide - 50, 100, 100)

        barrelTable[bindex]:setFillColor(r,g,b)

        generated2:insert(barrelTable[bindex])

        print (“spawning”, bindex)

        end

    elseif generateNum == 2 then

        local i = 0

        for i = 1, 3 do

      bindex = bindex + 1

      local rndmX = math.random(leftSide, rightSide)

      local r = math.random(0.1, 1)

      local g = math.random(0.1, 1)

      local b = math.random(0.1, 1)

       barrelTable[bindex] = display.newCircle(rndmX, topSide - 50, 50, 50)

        barrelTable[bindex]:setFillColor(r,g,b)

        generated3:insert(barrelTable[bindex])

        print (“spawning”, bindex)

        end

    end

    return true

end

Runtime:addEventListener(“enterFrame”, scrollObstacle)

timer.performWithDelay(1000, createNewObstacle, 0)

[/lua]

This might not be perfect. Also, I suggest reading up on using tables they are very powerful. 

[lua]   

local  generated2 = display.newGroup()

local  generated3 = display.newGroup()

local bindex = 0

local barrelTable = {}

local barrelTable1 = {}

local leftSide = display.screenOriginX

local rightSide = display.contentWidth - display.screenOriginX

local topSide = display.screenOriginY

local bottomSide = display.contentHeight - display.screenOriginY

local speed = 10

function scrollObstacle(specGen)

local i = 0 

for i = #barrelTable, 1, -1 do

if barrelTable[i] then

   if barrelTable[i].contentBounds.yMin > bottomSide then

    local z = table.remove(barrelTable, i)

       z:removeSelf()

       z = nil

       print(“removing”, #barrelTable)

       bindex = bindex - 1

   else

        barrelTable[i].y = barrelTable[i].y + speed

   end

end

end

end

function createNewObstacle()

    local generateNum = math.random(1,2)

    speed = speed + 0.1

    if generateNum == 1 then

        local i = 0

        for i = 1, 3 do

      bindex = bindex + 1

      local rndmX = math.random(leftSide, rightSide)

      local r = math.random(0.2, 1)

      local g = math.random(0.2, 1)

      local b = math.random(0.2, 1)

       barrelTable[bindex] = display.newRect(rndmX, topSide - 50, 100, 100)

        barrelTable[bindex]:setFillColor(r,g,b)

        generated2:insert(barrelTable[bindex])

        print (“spawning”, bindex)

        end

    elseif generateNum == 2 then

        local i = 0

        for i = 1, 3 do

      bindex = bindex + 1

      local rndmX = math.random(leftSide, rightSide)

      local r = math.random(0.1, 1)

      local g = math.random(0.1, 1)

      local b = math.random(0.1, 1)

       barrelTable[bindex] = display.newCircle(rndmX, topSide - 50, 50, 50)

        barrelTable[bindex]:setFillColor(r,g,b)

        generated3:insert(barrelTable[bindex])

        print (“spawning”, bindex)

        end

    end

    return true

end

Runtime:addEventListener(“enterFrame”, scrollObstacle)

timer.performWithDelay(1000, createNewObstacle, 0)

[/lua]

This might not be perfect. Also, I suggest reading up on using tables they are very powerful.