lua - Corona SDk - how to get a moving object to rotate and travel to a tap point? -


i new programming enjoying learning corona trial , error (mostly error!)

i working on creating air traffic control sim college project , have run brick wall on how object (airplane on radar) turn , travel tap point.

i using following code move airplanes:

local function moveairplane1(event)  function cleanairplaneruntime() runtime:removeeventlistener("enterframe", moveairplane1) end  if airplane1onradar == false 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)    

this works fine , can control direction adding or subtracting airplane.rotation value. however, want allow player tap screen , have airplane rotate , travel point.

i have been trying calculate angle between tap point , airplane , rotating aircraft difference there many permutations depending on quadrant airplane in , quadrant tap point in relative airplane i'm wondering if i'm on right track @ or there simple way missing?

here have been trying (apologies, long winded)

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 , 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 , airplane.y < vp.y          if roundvector < 90             newvector = 90 - roundvector + 90             print("newvector = "..newvector)         elseif             roundvector > 90 , roundvector < 180             newvector = 180 + roundvector             print("newvector = "..newvector)         elseif             roundvector > 180 , newvector < 270             newvector = roundvector             print("newvector = "..newvector)         elseif             roundvector > 270             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                 turnlefttimer1 = timer.performwithdelay(500, turnleft1, newvector)                 --end             end              turntimer1()         --end        elseif airplane.x < vp.x , airplane.y < vp.y          if roundvector < 90             newvector = 90 - roundvector + 90             print("newvector = "..newvector)         elseif             roundvector > 90 , roundvector < 180             newvector = 180 + roundvector             print("newvector = "..newvector)         elseif             roundvector > 180 , newvector < 270             newvector = roundvector             print("newvector = "..newvector)         elseif             roundvector > 270             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                 turnonerighttimer = timer.performwithdelay(500, turnright1,newvector)                 end             end             turntimer2()  --quadrant 2          elseif airplane.x > vectorpoint.x , airplane.y < vectorpoint.y          if roundvector < 90             newvector = 90 - roundvector + 90             print("newvector = "..newvector)         elseif             roundvector > 90 , roundvector < 180             newvector = 180 + roundvector             print("newvector = "..newvector)         elseif             roundvector > 180 , newvector < 270             newvector = roundvector             print("newvector = "..newvector)         elseif             roundvector > 270             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                 turnonelefttimer = timer.performwithdelay(500, turnleft2, newvector)                 end             end              turntimer3()      elseif airplane.x > vectorpoint.x , airplane.y < vectorpoint.y          if roundvector < 90             newvector = 90 - roundvector + 90             print("newvector = "..newvector)         elseif             roundvector > 90 , roundvector < 180             newvector = 180 + roundvector             print("newvector = "..newvector)         elseif             roundvector > 180 , newvector < 270             newvector = roundvector             print("newvector = "..newvector)         elseif             roundvector > 270             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                 turnonerighttimer = timer.performwithdelay(500, turnright2, newvector)                 end             end             turntimer4()  --quadrant 3      elseif airplane.x < vectorpoint.x , airplane.y > vectorpoint.y          if roundvector < 90             newvector = 90 - roundvector + 90             print("newvector = "..newvector)         elseif             roundvector > 90 , roundvector < 180             newvector = 180 + roundvector             print("newvector = "..newvector)         elseif             roundvector > 180 , newvector < 270             newvector = roundvector             print("newvector = "..newvector)         elseif             roundvector > 270             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                 turnonelefttimer = timer.performwithdelay(500, turnleft3, newvector)                 end             end             turntimer5()          elseif airplane.x < vectorpoint.x , airplane.y > vectorpoint.y          if roundvector < 90             newvector = 90 - roundvector + 90             print("newvector = "..newvector)         elseif             roundvector > 90 , roundvector < 180             newvector = 180 + roundvector             print("newvector = "..newvector)         elseif             roundvector > 180 , newvector < 270             newvector = roundvector             print("newvector = "..newvector)         elseif             roundvector > 270             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                 turnonerighttimer = timer.performwithdelay(500, turnright3, newvector)                 end             end             turntimer6()  --quadrant 4      elseif airplane.x > vectorpoint.x , airplane.y > vectorpoint.y          if roundvector < 90             newvector = 90 - roundvector + 90             print("newvector = "..newvector)         elseif             roundvector > 90 , roundvector < 180             newvector = 180 + roundvector             print("newvector = "..newvector)         elseif             roundvector > 180 , newvector < 270             newvector = roundvector             print("newvector = "..newvector)         elseif             roundvector > 270             newvector = 180 + roundvector             print("newvector = "..newvector)         end               function turnright4()             airplane.rotation = airplane.rotation + 1             print("turn right4")             end              function turntimer7()                 if airplane.rotation ~= newvector                 turntimer = timer.performwithdelay(500, turnright4, newvector)                 end             end             turntimer7()          elseif airplane.x > vectorpoint.x , airplane.y > vectorpoint.y          if roundvector < 90             newvector = 90 - roundvector + 90             print("newvector = "..newvector)         elseif             roundvector > 90 , roundvector < 180             newvector = 180 + roundvector             print("newvector = "..newvector)         elseif             roundvector > 180 , newvector < 270             newvector = roundvector             print("newvector = "..newvector)         elseif             roundvector > 270             newvector = 180 + roundvector             print("newvector = "..newvector)         end               function turnleft4()             airplane.rotation = airplane.rotation - 1             print("turn left4")             end              function turntimer8()                 if airplane.rotation ~= newvector                 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 

thanks or pointers in advance,

thanks code devfar looking around , happened find , perfect looking for. there 1 small thing, speed different depending on how far away tap. changed in code constant, if else need it, here go.

local w = display.contentwidth local h = display.contentheight   local bg = display.newrect(0,0, w,h) local img = display.newimage("triangle.png")--make image arrow pointing right img.x = w/2 img.y = h/2  local getx local gety local travelflag = true  local distancex local distancey local totaldistance  function getimagerotation(x1,y1,x2,y2)     local pi = 3.14159265358     local deltay = y2 - y1     local deltax = x2 - x1      local angleindegrees = (math.atan2( deltay, deltax) * 180 / pi)*-1      local mult = 10^0      return math.floor(angleindegrees * mult + 0.5) / mult end   local function ontravel()  distancex=img.x-getx distancey=img.y-gety  print(distancex) print(distancey)  totaldistance=(distancex*distancex)+(distancey*distancey) totaldistance=math.sqrt(totaldistance) print(totaldistance)      local function flag()         travelflag = true     end      if travelflag         travelflag = false         img.rotation = (getimagerotation(img.x,img.y,getx,gety))*-1         transition.to( img, { time=totaldistance*5, x=getx, y=gety, oncomplete=flag } )     end end  local function ontap(event)      if event.phase == "began" or event.phase == "moved"         getx = event.x         gety = event.y      elseif event.phase == "ended"          ontravel()     end  end runtime:addeventlistener("touch", ontap) 

Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -