Linear Velocity

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?

@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

@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

@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?

@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.

@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.