So I was trying to simulate tiny wings and got pretty far…but I needed to make the chain loop is when the track runs out it just resets…however the second physics chain doesn’t register as a global value…immediately after I initialiseit the print debug reports ‘nil’ as if it doesn’t exist. And the table method for writing the chain is working fine: that’s printed out and all so t he chain has something’s wrong with it…anyways can you guys kindly look over my coding and help me out? You’ll see the problem after you run it…
For those of you who haven’t heard of tiny wings: randomised track with different elevations of up hills and downhills. Touching the screen increases the gravity of the object you play as, not touching decreases it. There’s a minimum velocity that the ball must travel at…
function setup()
iteration = 0
scrx, scry = 0,0
tab1, tab2 = {},{}
tab1 = makeNewChain()
makeChain()
backup = slopes
ball = physics.body(CIRCLE,10)
ball.x = 110
ball.y = 500
ball.restitution = .01
end
function makeChain()
slopes = physics.body(CHAIN, false, unpack(tab1))
end
function draw()
background(253, 3, 106, 255)
moveScreen()
-- c1 = physics.body()
if math.floor(ball.x) > (3600 * iteration )-120 - WIDTH/2 then -- -WIDTH/2 then
tab2 = tab1
tab1 = makeNewChain()
makeChain()
backup = slopes
end
if(toucheds == true) then ball.gravityScale = 2 else ball.gravityScale = .3 end
-- local prevX, prevY = 0,math.sin(math.rad(0)) * 50+ 200
for a,b in pairs(tab1) do
-- stroke(255, 255, 255, 255)
-- strokeWidth(2)
noStroke()
ellipse(b.x,b.y,25)
end
for a,b in pairs(tab2) do
-- stroke(255, 255, 255, 255)
--strokeWidth(2)
ellipse(b.x,b.y,25)
end
strokeWidth(3)
ellipse(ball.x,ball.y,ball.radius*2)
-- print(tab1[360].y.."=yval")
if(ball.linearVelocity.x <100) then
ball:applyForce(vec2(50,0))
end
end
function moveScreen()
if ball.x > WIDTH/2 - scrx then
scrx = -ball.x + WIDTH/2
end
if ball.x < WIDTH/2-scrx then
scrx = -ball.x + WIDTH/2
end
if ball.y < WIDTH/8 - scry then
scry = -ball.y + WIDTH/2
end
if ball.y > WIDTH/8 - scry then
scry = -ball.y + WIDTH/2
end
translate(scrx, scry)
--if(ball.y >)
end
function touched(t)
if t.state == BEGAN or t.state == MOVING then
toucheds = true
else if t.state == ENDED then
toucheds = false
end end
end
function makeNewChain()
local tab = {}
local yInt = 200
local amp = {}
count = 1
for a =0,20 do
amp[a] = math.random(20,100)
-- print(amp[a].x)
end
for a = (3600*iteration), 3600 * (iteration+1),10 do
if iteration > 0 and a == 3600 * iteration then
yInt = tab1[360].y - math.cos(math.rad(a)) * amp[(a - 3600*iteration)/180]
end
if a == 0 + (3600*iteration) then count = 1 end
if(a %180 == 0 and a > (3600*iteration)) then
count = count + 1
yInt = tab[a/10 - (3600*iteration) -1].y - math.cos(math.rad(a)) * amp[(a - 3600*iteration)/180]
-- print(yInt)
end
tab[a/10 - 3600*iteration] = vec2(a - (12*count) -240*iteration, math.cos(math.rad(a)) * amp[math.floor((a-3600*iteration)/180)] + yInt)
end
iteration = iteration + 1
print("new CHAIN")
return tab
end
Thanks guys