#### Howdy, Stranger!

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

# Setting up an object's direction

edited October 2016 Posts: 9

Hey guys, so I have a ball and a direction set up depending on where you touch the screen but I don't know how to set up the direction with the object on the screen. Here's the code:

``````-- Lines1
displayMode(FULLSCREEN)
-- Use this function to perform your initial setup
function setup()
held=false
directionx=0
directiony=0
speedx=WIDTH/2
speedy=HEIGHT/2
end

-- This function gets called once every frame
function draw()
-- This sets a dark background color
background(95, 112, 115, 255)
fill(255, 255, 255, 255)
-- This sets the line thickness
strokeWidth(5)

ellipse(ballx,bally,40)
if held == true then
line(ballx,bally,CurrentTouch.x,CurrentTouch.y)
end
end

function touched(touch)
if touch.state == BEGAN then
held=true
direction=vec2(touch.prevX,touch.prevY)
end
if touch.state == ENDED then
held=false
directionx=touch.prevX
directiony=touch.prevY
end
end
``````

Any help is much appreciated!

Tagged:

• edited October 2016 Posts: 5,396

I suggest you separate speed and direction, then you can calculate the direction from your current position to the touch like this

``````speed=10 --10 pixels per draw cycle
--i suggest you store current position in a vec2 like this
position=vec2(100,200) --how you set the initial position
direction=vec2(0,0) --no initial direction
--after a user touch, recalculate direction
direction=(vec2(touch.x,touch.y)-position):normalize()
--to move the user
position=position+direction*speed
``````

``````-- Lines1
displayMode(FULLSCREEN)
-- Use this function to perform your initial setup
function setup()
held=false
direction=vec2(0,0)
speed=3
position=vec2(WIDTH/2,HEIGHT/2)
end

-- This function gets called once every frame
function draw()
-- This sets a dark background color
background(95, 112, 115, 255)
fill(255, 255, 255, 255)
-- This sets the line thickness
strokeWidth(5)

position=position+direction*speed
ellipse(position.x,position.y,40)
if held == true then
line(position.x,position.y,CurrentTouch.x,CurrentTouch.y)
end
end

function touched(touch)
if touch.state == BEGAN then
held=true
end
if touch.state == ENDED then
held=false
direction=(vec2(touch.x,touch.y)-position):normalize()
end
end
``````
• edited October 2016 Posts: 9

Thanks @Ignatz!