Note that there are some explanatory texts on larger screens.

plurals
  1. POCorona SDk - how to get a moving object to rotate and travel to a tap point?
    primarykey
    data
    text
    <p>I am fairly new to programming but I am enjoying learning Corona by trial and error (mostly error!)</p> <p>I am working on creating an Air Traffic Control Sim for a college project and have run into a brick wall on how to get an object (airplane on radar) to turn and travel to a tap point.</p> <p>I am using the following code to move the airplanes:</p> <pre><code>local function moveAirplane1(event) function cleanAirplaneRuntime() Runtime:removeEventListener("enterFrame", moveAirplane1) end if Airplane1OnRadar == false then cleanEI137Runtime() end Airplane1.x = Airplane1.x + math.cos(math.rad(Airplane1.rotation)) * Airplane1SPEED Airplane1.y = Airplane1.y + math.sin(math.rad(Airplane1.rotation)) * Airplane1SPEED end Runtime:addEventListener("enterFrame", moveAirplane1) </code></pre> <p>This works fine and I can control the direction by adding or subtracting from the airplane.rotation value. However, what I want to do is allow the player to tap the screen and have the airplane rotate and travel to that point.</p> <p>I have been trying to calculate the angle between the tap point and the airplane and then rotating the aircraft by the difference but there are so many permutations depending on what quadrant the airplane is in and what quadrant the tap point is in relative to the airplane that I'm wondering if I'm on the right track at all or is there a simple way to do this that I am missing?</p> <p>Here is what I have been trying (apologies, it is long winded)</p> <pre><code>function vectorTo() function setVectorPoint(event) vectorPoint = display.newCircle(0, 0, 5) vectorPoint.x = event.x vectorPoint.y = event.y vectorPoint.alpha = 0.5 airplane = EI159 vP = vectorPoint airplaneHdg = EI159CurrentHeading Runtime:removeEventListener("tap", setVectorPoint) function angleBetween(vP, airplane ) -- Calculate angle between airplane and tap point airplane = Airplane1 vP = vectorPoint xDist = airplane.x - vP.x yDist = airplane.y - vP.y angleBetween = math.deg( math.atan( yDist/xDist ) ) return angleBetween end </code></pre> <h2>-----------------------------------------------------------------</h2> <pre><code>function vectorResult() function round(angleBetween, precision) return math.floor(angleBetween*math.pow(10,0)+0.5) / math.pow(10,0) end roundVector = round(angleBetween,precision) print("roundVector = "..roundVector) --Quadrant 1 if airplane.x &lt; vP.x and airplane.y &lt; vP.y then if roundVector &lt; 90 then newVector = 90 - roundVector + 90 print("newVector = "..newVector) elseif roundVector &gt; 90 and roundVector &lt; 180 then newVector = 180 + roundVector print("newVector = "..newVector) elseif roundVector &gt; 180 and newVector &lt; 270 then newVector = roundVector print("newVector = "..newVector) elseif roundVector &gt; 270 then newVector = 180 + roundVector print("newVector = "..newVector) end function turnLeft1() airplane.rotation = airplane.rotation - 1 print("Turn Left1") end function turnTimer1() --if airplane.rotation ~= airplaneHdg + newVector then turnLeftTimer1 = timer.performWithDelay(500, turnLeft1, newVector) --end end turnTimer1() --end elseif airplane.x &lt; vP.x and airplane.y &lt; vP.y then if roundVector &lt; 90 then newVector = 90 - roundVector + 90 print("newVector = "..newVector) elseif roundVector &gt; 90 and roundVector &lt; 180 then newVector = 180 + roundVector print("newVector = "..newVector) elseif roundVector &gt; 180 and newVector &lt; 270 then newVector = roundVector print("newVector = "..newVector) elseif roundVector &gt; 270 then newVector = 180 + roundVector print("newVector = "..newVector) end function turnRight1() airplane.rotation = airplane.rotation + 1 print("Turn Right1") end function turnTimer2() if airplane.rotation ~= 180 + newVector then turnOneRightTimer = timer.performWithDelay(500, turnRight1,newVector) end end turnTimer2() --Quadrant 2 elseif airplane.x &gt; vectorPoint.x and airplane.y &lt; vectorPoint.y then if roundVector &lt; 90 then newVector = 90 - roundVector + 90 print("newVector = "..newVector) elseif roundVector &gt; 90 and roundVector &lt; 180 then newVector = 180 + roundVector print("newVector = "..newVector) elseif roundVector &gt; 180 and newVector &lt; 270 then newVector = roundVector print("newVector = "..newVector) elseif roundVector &gt; 270 then newVector = 180 + roundVector print("newVector = "..newVector) end function turnLeft2() airplane.rotation = airplane.rotation - 1 print("Turn Left2") end function turnTimer3() if airplane.rotation ~= 180 - newVector then turnOneLeftTimer = timer.performWithDelay(500, turnLeft2, newVector) end end turnTimer3() elseif airplane.x &gt; vectorPoint.x and airplane.y &lt; vectorPoint.y then if roundVector &lt; 90 then newVector = 90 - roundVector + 90 print("newVector = "..newVector) elseif roundVector &gt; 90 and roundVector &lt; 180 then newVector = 180 + roundVector print("newVector = "..newVector) elseif roundVector &gt; 180 and newVector &lt; 270 then newVector = roundVector print("newVector = "..newVector) elseif roundVector &gt; 270 then newVector = 180 + roundVector print("newVector = "..newVector) end function turnRight2() airplane.rotation = airplane.rotation + 1 print("Turn Right2") end function turnTimer4() if airplane.rotation &gt; 180 + newVector then turnOneRightTimer = timer.performWithDelay(500, turnRight2, newVector) end end turnTimer4() --Quadrant 3 elseif airplane.x &lt; vectorPoint.x and airplane.y &gt; vectorPoint.y then if roundVector &lt; 90 then newVector = 90 - roundVector + 90 print("newVector = "..newVector) elseif roundVector &gt; 90 and roundVector &lt; 180 then newVector = 180 + roundVector print("newVector = "..newVector) elseif roundVector &gt; 180 and newVector &lt; 270 then newVector = roundVector print("newVector = "..newVector) elseif roundVector &gt; 270 then newVector = 180 + roundVector print("newVector = "..newVector) end function turnLeft3() airplane.rotation = airplane.rotation - 1 print("Turn Left3") end function turnTimer5() if airplane.rotation &lt; 180 - newVector then turnOneLeftTimer = timer.performWithDelay(500, turnLeft3, newVector) end end turnTimer5() elseif airplane.x &lt; vectorPoint.x and airplane.y &gt; vectorPoint.y then if roundVector &lt; 90 then newVector = 90 - roundVector + 90 print("newVector = "..newVector) elseif roundVector &gt; 90 and roundVector &lt; 180 then newVector = 180 + roundVector print("newVector = "..newVector) elseif roundVector &gt; 180 and newVector &lt; 270 then newVector = roundVector print("newVector = "..newVector) elseif roundVector &gt; 270 then newVector = 180 + roundVector print("newVector = "..newVector) end function turnRight3() airplane.rotation = airplane.rotation + 1 print("Turn Right3") end function turnTimer6() if airplane.rotation &gt; 180 - newVector then turnOneRightTimer = timer.performWithDelay(500, turnRight3, newVector) end end turnTimer6() --Quadrant 4 elseif airplane.x &gt; vectorPoint.x and airplane.y &gt; vectorPoint.y then if roundVector &lt; 90 then newVector = 90 - roundVector + 90 print("newVector = "..newVector) elseif roundVector &gt; 90 and roundVector &lt; 180 then newVector = 180 + roundVector print("newVector = "..newVector) elseif roundVector &gt; 180 and newVector &lt; 270 then newVector = roundVector print("newVector = "..newVector) elseif roundVector &gt; 270 then newVector = 180 + roundVector print("newVector = "..newVector) end function turnRight4() airplane.rotation = airplane.rotation + 1 print("Turn Right4") end function turnTimer7() if airplane.rotation ~= newVector then turnTimer = timer.performWithDelay(500, turnRight4, newVector) end end turnTimer7() elseif airplane.x &gt; vectorPoint.x and airplane.y &gt; vectorPoint.y then if roundVector &lt; 90 then newVector = 90 - roundVector + 90 print("newVector = "..newVector) elseif roundVector &gt; 90 and roundVector &lt; 180 then newVector = 180 + roundVector print("newVector = "..newVector) elseif roundVector &gt; 180 and newVector &lt; 270 then newVector = roundVector print("newVector = "..newVector) elseif roundVector &gt; 270 then newVector = 180 + roundVector print("newVector = "..newVector) end function turnLeft4() airplane.rotation = airplane.rotation - 1 print("Turn Left4") end function turnTimer8() if airplane.rotation ~= newVector then turnTimer = timer.performWithDelay(500, turnLeft4, newVector) end end turnTimer8() end end vectorResulttimer = timer.performWithDelay(800, vectorResult) function removeVP() display.remove(vectorPoint) vectorPoint = nil Airplane1dA.isVisible = false timer.cancel(removeVPTimer) end removeVPTimer = timer.performWithDelay(1500, removeVP) timer.performWithDelay(600, angleBetween) end function addEventVectorPoint() Runtime:addEventListener("tap", setVectorPoint) end vectorPointTimer = timer.performWithDelay(500, addEventVectorPoint) end </code></pre> <p>Thanks for any help or pointers in advance,</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload