Я новичок в Corona и в качестве учебного упражнения создаю простую игру "keepie uppie" (http://en.wikipedia.org/wiki/Keepie_uppie) с использованием физического движка Corona SDK.
У меня все аспекты работают правильно, кроме движения мяча при «ударе». Я использую фазу «начало» сенсорного события, чтобы применить кик через метод applyLenearImpulse.
Моя проблема в том, что мяч обычно ведет себя так, как будто сила прикладывается сверху, заставляя его стрелять в пол игровой среды. Это несмотря на силу, приложенную в точке контакта на шаре.
Я нашел следующий способ:
function ball:touch( event )
-- only allow taps in bottom half of ball
if ( event.y > ball.y and event.phase == "began" ) then
-- temporarily move floor to just below ball
floor.y = ball.y + ballSize
local flipx = 0
if(event.x > ball.x) then
flipx = event.x - ballSize
elseif(event.x < ball.x) then
flipx = event.x + ballSize
else
flipx = event.x
end
ball:applyLinearImpulse( 0, kickForce, flipx, event.y)
end
end
Вышеприведенное действие работает путем временного перемещения положения пола чуть ниже шара до применения силы (затем пол возвращается в правильное положение с помощью прослушивателя события enterFrame).
Я также обнаружил, что с этим решением мне нужно было перевернуть положение x касания события, иначе оно отскочило бы горизонтально против ожидаемого направления.
Выше явно не идеально. Должен ли я остановить движение мяча перед применением силы, и если да, то как? Или я полностью ошибаюсь?