It looks like you're new here. If you want to get involved, click one of these buttons!
I hunk it has something to do with how I'm resetting the inAir variable (collide function)
-- 2D Game
function setup()
physics.continuous=true
diam = 60
w1 = physics.body(EDGE,vec2(0,0),vec2(WIDTH,0))
w2 = physics.body(EDGE,vec2(0,0),vec2(0,HEIGHT))
w3 = physics.body(EDGE,vec2(WIDTH,0),vec2(WIDTH,HEIGHT))
w4 = physics.body(EDGE, vec2(0, HEIGHT), vec2(WIDTH, HEIGHT))
ball = physics.body(CIRCLE, 30)
ball.gravityScale = 1
ball.restitution = .8
ball.x = 50
ball.y = 50
direction = "none"
up = false
inAir = false
end
function draw()
local y = 0
if up == true then
up = false
y = 5000
inAir = true
end
if direction == "LEFT" then
ball.linearVelocity = vec2(-75, y)
elseif direction == "RIGHT" then
ball.linearVelocity = vec2(75, y)
end
--Set up color stuff
background(0, 0, 0)
--Set up ball stuff
fill(255,0,0)
strokeWidth(0)
--Draw the ball using x,y position of physics object
ellipse(ball.x,ball.y,diam)
--Set up wall stuff
stroke(255, 255, 255, 255)
strokeWidth(2)
--Draw walls
line(0, 0, WIDTH, 0)
line(0, 0, 0, HEIGHT)
line(WIDTH, 0, WIDTH, HEIGHT)
line(0, HEIGHT, WIDTH, HEIGHT)
end
function touched(t)
if t.state == BEGAN then
if t.x < WIDTH/2 then
direction = "LEFT"
else
direction = "RIGHT"
end
if t.y > HEIGHT/2 and inAir == false then
up = true
end
else
direction = "none"
end
end
function collide(contact)
if contact == BEGAN and contact.bodyA == ball and contact.bodyB == w1 then
inAir = false
end
end
See latest post for new question.
Comments
sometimes bodyA and bodyB can be hard to use, I might be wrong but when I use them, any EDGE is always bodyA, try switching the ball to bodyB and the floor to bodyA.
@warspyking In the function collide, you need " if contact.state==BEGAN" . Also, bodyA and bodyB aren't always ball or w1. You need to check them both ways, You can't be sure which way they'll be. Normally the first one defined will be bodyA and the second bodyB but that can change.
Still don't work properly:
I think I would put brackets in to make sure Codea understands what you want
You have contact.bodyB too many times in your if statements. Try the code below.
@dave 1707 thank you
Well no matter what I set y to:
It won't go higher.
remove the local y=0 in draw.
@dave1707 Why on earth would I do that? It's a default value for if I'm in air then it will use 0 as the y.
@warspyking - think about it for a second.
When you touch, and set
up=true
, what happens then in draw?First time,
y is set to 0
up=true, so it is set to false and y=5000
Second time draw runs,
y is set to 0
up=false, so y stays at 0 !!!!!
and that is your problem, right there. So dave was right. Next time, just work it through slowly, step by step, and you'll see it more easily.
@Ig So in other words, I gotta reset up to true?
you figure out what you want to do, I can't tell you