Howdy, Stranger!

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

Linear Velocity

edited July 2014 in General Posts: 142

I'm a little bit confused on something within Codea. I am trying to get a ball to aim itself towards my touch (t.x). I've tried to use linearVelocity(the ball is a physics body) ,but when called, it flies in a completely opposite direction to my touch. Any advice on what I need to do?

Tagged:

• edited July 2014 Posts: 7,807

@Staples Tap the screen or drag your finger around the screen.

displayMode(FULLSCREEN) function setup() b=physics.body(CIRCLE,20) b.x=WIDTH/2 b.y=HEIGHT/2 b.gravityScale=0 end function draw() background(40, 40, 50) fill(255) ellipse(b.x,b.y,40) end function touched(t) if t.state==BEGAN or t.state==MOVING then dx=t.x-b.x dy=t.y-b.y b.linearVelocity=vec2(dx,dy) end end
• Posts: 7,807

@Staples Here's another version where the ball will stop at the last touched point.

displayMode(FULLSCREEN) function setup() b=physics.body(CIRCLE,20) b.x=WIDTH/2 b.y=HEIGHT/2 b.gravityScale=0 tx=b.x ty=b.y end function draw() background(40, 40, 50) fill(255) ellipse(b.x,b.y,40) dx=tx-b.x dy=ty-b.y b.linearVelocity=vec2(dx,dy) end function touched(t) if t.state==BEGAN or t.state==MOVING then tx=t.x ty=t.y end end
• Posts: 142

@dave1707 perfect, thanks. I was taking it that linearVelocity was forcing an object towards a certain vec2, but I now understand that it is basically the difference in direction from its current direction. Am I correct in saying this?

• Posts: 7,807

@Staples linearVelocity is the direction you want the object to go. If you want it to go left, then it would have a negative x velocity. To go right, it would have a positive x velocity. To go up, it has a positive y velocity. To go down, a negative y velocity. To go at some diagonal, the x,y velocities would be some x,y value positive or negative.

• edited July 2014 Posts: 1,595

@Staples yes you do need to find the difference between two vectors for the linearVelocity. body1.linearVelocity = (body2.position - body1.position) will give the velocity of the direction towards body2's position and (body1.position - body2.position) will give the direction facing away from body2, equally you can do (body2.position - body1.position)*-1 to give the direction facing away from body2.
If you already knew this then you know enough to make a good game.