2

В моем проекте SpriteKit я учусь использовать замечательный встроенный физический движок. Я выполняю это с использованием экземпляров SKPhysicsBody, прикрепленных к узлам, и до сих пор он хорошо зарекомендовал себя. Моя текущая настройка - когда я добавляю узел, я устанавливаю его вектор physicsBodyvelocity на некоторую постоянную скорость. Несмотря на то, что ручная установка скорости на некоторое фиксированное значение, через несколько секунд столкновений узлов, их скорость уменьшается. Я предполагаю, что это характеристика по умолчанию, поскольку она имитирует физику реальной жизни (потеря энергии за счет нескольких столкновений). Я хотел бы остановиться на этом. Например, я бы хотел, чтобы, несмотря на многочисленные столкновения, вся энергия была полностью «сохранена» и не потеряна скорость. Вот несколько вещей, которые я пробовал безрезультатно.Стоп-торможение в SKPhysicsBody Collisions

  1. physicsBody.linearDamping = 0;
  2. physicsBody.friction = 0;

Это даже physicsBody свойства, или делает это поведение шток от собственности на SKScene «ы physicsWorld собственности?

+0

Вы не можете сохранить свой импульс, как вы описали. Есть несколько вещей, которые вы можете сделать, хотя для поддержания постоянной скорости. Есть много вещей, которые вы могли бы сделать. Одним из них вы можете применить к вам объект без остановки и ограничить его скорость. – sangony

+0

Вы можете установить для collisionBitMask все физические тела в ноль. Это заставит их двигаться дальше, как будто они не сталкиваются ни с чем. Тем не менее, вы должны установить контактTestBitMask, так как тогда делегаты по-прежнему будут вызваны. Если вы хотите, чтобы тела столкнулись, вы можете установить их скорости в контактных делегатах – ZeMoon

+0

@sangony Я нашел ответ и отправил, если вы все еще заинтересованы. –

ответ

1

После того, как я потратил много времени на рассмотрение документации Apple, я нашел ответ. Свойство restitution на SKPhysicsBody контролирует, сколько энергии теряется, когда это тело сталкивается с другими. Это свойство представляет собой поплавок, который находится в диапазоне [0 ... 1], который обратно коррелирует с количеством потерянной энергии при столкновениях (, тем выше число, тем меньше потерянная энергия). Например, значение по умолчанию этого свойства равно .2, что представляет собой довольно высокую потерю энергии. Чтобы решить мою проблему, я установил это свойство на 1 на каждое из моих тел, поэтому, когда они взаимодействуют, энергия не теряется.

self.someNode.physicsBody.restitution = 1.0f; 

Результаты: Эта проблема решена, 100% и после нескольких часов моделирования, физика тел, не теряя энергии вообще.

1

Также необходимо учитывать density (или mass). restitution сам по себе не решал проблему свободной скорости на некоторых конфигурациях корпуса.