Как использовать applyLinearImpulse на основе вращения в Corona / Lua - PullRequest
3 голосов
/ 24 октября 2010

Я использую Corona Gaming Addition SDK для создания игры для iphone / andorid. У меня есть космический корабль на экране, и я позволю пользователю поворачивать корабль на 360 градусов. Затем я хотел бы вызвать метод applyLinearImpulse, чтобы позволить пользователю толкать корабль вперед в направлении, к которому он направлен.

Метод принимает эти аргументы, которые применяются к кораблям X и Y, чтобы переместить корабль в новое место назначения. Хитрость заключается в том, чтобы выяснить, какие новые X и Y должны основываться на повороте / направлении, на которое указывает корабль.

ship:applyLinearImpulse(newX, newY, player.x, player.y)

Кто-нибудь делал это или есть предложения по математике, которые бы это выяснили?

спасибо -m

Ответы [ 2 ]

2 голосов
/ 24 октября 2010

Хорошо .... примерно через 5 минут после того, как я написал это, я понял это.Вот ответ

speedX = 0.5 * (math.sin(ship.rotation*(math.pi/180)))
speedY = -0.5 * (math.cos(ship.rotation*(math.pi/180)))

if(event.phase =="began") then
  ship:applyLinearImpulse(speedX, speedY, player.x, player.y)
end
1 голос
/ 07 января 2011

Есть несколько вещей, которые вы можете улучшить в своем коде.

Первая - это способ вычисления угла.Вместо

ship.rotation*(math.pi/180)

Вы можете сделать это:

local inverseRotation = ship.rotation + math.pi

Сложение происходит быстрее, чем деление и умножение.Кроме того, хранение его в переменной избавит вас от необходимости вычислять его дважды.Тогда вы можете сделать:

local inverseRotation = ship.rotation + math.pi
local speedX, speedY = 0.5 * math.sin(inverseRotation), -0.5 * math.cos(inverseRotation)

С уважением!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...