2017-01-06 23 views
0

Я пытаюсь понять, как правильно перемещать объекты «препятствия» в короне/box2d. Я хочу знать, как написать свой код, чтобы движение было детерминированным и в ногу с физическим движком. Это возможно?Как перемещать объекты "препятствия". Corona SDK Physics Box2D. Обновление физики?

Я знаком с Unity, который имеет физическое обновление (FixedUpdate). Где вы можете добавить немного кода для выполнения на каждом этапе физики. Это позволяет физическим детерминированным, рамным и системным временным независимым.

Например, в моей игре я хочу делать такие вещи, как: Создавать платформу, которая перемещается вперед и назад, создавать объект, который масштабируется вверх и вниз по размеру. Мне все равно хотелось бы, чтобы физика работала правильно и позволила мячу в моей игре отскакивать от них, например. В зависимости от случая, я полагаю, что я должен использовать либо kinematic or dynamic bodies.

Я искал вокруг и способ периодически управлять этими объектами является использование:

  • timer.performWithDelay. Но это проблема, упомянутая в документах «Таймеры запускаются в системное время. Если приложение приостановлено, запуск таймеров не будет автоматически приостановлен»
  • Прослушивание события enterFrame. Но это имеет аналогичную проблему, если частота кадров падает, тогда объект не будет перемещен достаточно. Мы можем использовать дельта-время, чтобы справиться с этим, но это имеет проблемы детерминизма (слишком много перемещает объект по шишке запаздывания).
  • transition.to. Я предполагаю, что это реализовано с помощью timer.performWithDelay и имеет те же проблемы.

Я не думаю, что любой из них будет вести себя детерминированным. Какие-либо предложения? Спасибо за помощь.

+0

Я не знаю других методов. «Таймеры запускаются в системное время. Если приложение приостановлено, запуск таймеров не будет автоматически приостановлен» действительно ли проблема? Вы можете обнаружить, когда приложение приостановлено. Подробнее [Учебное пособие: обработка событий системы Corona] (https://coronalabs.com/blog/2012/05/15/handling-corona-system-events/). – ldurniat

+0

Кажется, что у физики есть все эти побочные эффекты времени. :(Я думаю, что на самом деле нужно просто запустить «шаг блокировки» с обновлением физики. Событие «enterPhysicsStep» может решить этот – 1337Rooster

+0

, вы попробовали группу отображения, чтобы иметь их вообще? – Amir

ответ

0

Вы действительно должны использовать:

object:setLinearVelocity(xVelocity, yVelocity) 

или

object:applyForce(xForce, yForce) 

вместо transition.to.