我对编程很陌生,但我很享受通过反复试验来学习 Corona(主要是错误!)
我正在为一个大学项目创建一个空中交通控制模拟程序,并且在如何让一个物体(雷达上的飞机)转向并前往一个水龙头点时遇到了障碍。
我正在使用以下代码来移动飞机:
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)
这很好用,我可以通过添加或减去 plane.rotation 值来控制方向。然而,我想做的是让玩家点击屏幕,让飞机旋转并飞到那个点。
我一直在尝试计算分接点和飞机之间的角度,然后通过差值旋转飞机,但是根据飞机所在的象限以及分接点相对于飞机的象限,有很多排列我想知道我是否走在正确的轨道上,或者是否有一种我想念的简单方法来做到这一点?
这是我一直在尝试的(抱歉,啰嗦了)
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
-------------------------------------------------- ---------------
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 < vP.x and airplane.y < vP.y then
if roundVector < 90 then
newVector = 90 - roundVector + 90
print("newVector = "..newVector)
elseif
roundVector > 90 and roundVector < 180 then
newVector = 180 + roundVector
print("newVector = "..newVector)
elseif
roundVector > 180 and newVector < 270 then
newVector = roundVector
print("newVector = "..newVector)
elseif
roundVector > 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 < vP.x and airplane.y < vP.y then
if roundVector < 90 then
newVector = 90 - roundVector + 90
print("newVector = "..newVector)
elseif
roundVector > 90 and roundVector < 180 then
newVector = 180 + roundVector
print("newVector = "..newVector)
elseif
roundVector > 180 and newVector < 270 then
newVector = roundVector
print("newVector = "..newVector)
elseif
roundVector > 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 > vectorPoint.x and airplane.y < vectorPoint.y then
if roundVector < 90 then
newVector = 90 - roundVector + 90
print("newVector = "..newVector)
elseif
roundVector > 90 and roundVector < 180 then
newVector = 180 + roundVector
print("newVector = "..newVector)
elseif
roundVector > 180 and newVector < 270 then
newVector = roundVector
print("newVector = "..newVector)
elseif
roundVector > 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 > vectorPoint.x and airplane.y < vectorPoint.y then
if roundVector < 90 then
newVector = 90 - roundVector + 90
print("newVector = "..newVector)
elseif
roundVector > 90 and roundVector < 180 then
newVector = 180 + roundVector
print("newVector = "..newVector)
elseif
roundVector > 180 and newVector < 270 then
newVector = roundVector
print("newVector = "..newVector)
elseif
roundVector > 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 > 180 + newVector then
turnOneRightTimer = timer.performWithDelay(500, turnRight2, newVector)
end
end
turnTimer4()
--Quadrant 3
elseif airplane.x < vectorPoint.x and airplane.y > vectorPoint.y then
if roundVector < 90 then
newVector = 90 - roundVector + 90
print("newVector = "..newVector)
elseif
roundVector > 90 and roundVector < 180 then
newVector = 180 + roundVector
print("newVector = "..newVector)
elseif
roundVector > 180 and newVector < 270 then
newVector = roundVector
print("newVector = "..newVector)
elseif
roundVector > 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 < 180 - newVector then
turnOneLeftTimer = timer.performWithDelay(500, turnLeft3, newVector)
end
end
turnTimer5()
elseif airplane.x < vectorPoint.x and airplane.y > vectorPoint.y then
if roundVector < 90 then
newVector = 90 - roundVector + 90
print("newVector = "..newVector)
elseif
roundVector > 90 and roundVector < 180 then
newVector = 180 + roundVector
print("newVector = "..newVector)
elseif
roundVector > 180 and newVector < 270 then
newVector = roundVector
print("newVector = "..newVector)
elseif
roundVector > 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 > 180 - newVector then
turnOneRightTimer = timer.performWithDelay(500, turnRight3, newVector)
end
end
turnTimer6()
--Quadrant 4
elseif airplane.x > vectorPoint.x and airplane.y > vectorPoint.y then
if roundVector < 90 then
newVector = 90 - roundVector + 90
print("newVector = "..newVector)
elseif
roundVector > 90 and roundVector < 180 then
newVector = 180 + roundVector
print("newVector = "..newVector)
elseif
roundVector > 180 and newVector < 270 then
newVector = roundVector
print("newVector = "..newVector)
elseif
roundVector > 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 > vectorPoint.x and airplane.y > vectorPoint.y then
if roundVector < 90 then
newVector = 90 - roundVector + 90
print("newVector = "..newVector)
elseif
roundVector > 90 and roundVector < 180 then
newVector = 180 + roundVector
print("newVector = "..newVector)
elseif
roundVector > 180 and newVector < 270 then
newVector = roundVector
print("newVector = "..newVector)
elseif
roundVector > 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
感谢您提前提供任何帮助或指示,