2014-02-03 6 views
1

Можно ли ускорить SKSpriteNode?Ускорить SKSpriteNode

Я знаю, что скорость можно легко установить с помощью node.physicsBody.velocity, но как трудно было бы установить ее ускорение?

+0

Вы попробовали 'applyImpulse'? –

+0

Это не сработает, но «applyForce» будет. – Jordan

+0

Ну, 'applyImpulse' ускорит физическое тело без особого контроля над ним. – macshome

ответ

3

Работа в обратном направлении от закона новых людей: F = m.a Вы можете добиться желаемого ускорения с помощью applyForce, где сила - это ускорение, умноженное на массу.

[node.physicsBody applyForce:CGVectorMake(node.mass*acceleration.dx, 
              node.mass*acceleration.dy)]; 
0

Если вы хотите, чтобы ускорить, то вы должны изменить направление гравитации для объекта

self.physicsWorld.gravity = CGVectorMake(dx,dy) 

, но это сделало бы все ускорить, если это нормально

+0

Нет, я ищу ускорение отдельного узла, не затрагивая других. – Jordan

0

applyImpulse мгновенно передает количество энергии (в Newton.seconds). Ваш объект не ускоряется, так как мгновенно достигает желаемой скорости. Это вряд ли выглядит очень естественным, так как подразумевает почти бесконечную мощность (энергия, деленная на время), поэтому действительно подходит для взрывов (например, для стрельбы).

applyForce применяет силу (в Ньютонах) для интервала времени, в течение которого выполняется имитация (то есть: 1/60 секунды). Это позволяет вам правильно ускорить объект и имитировать одновременно много разных сил (гравитация, ветер, ракета и т. Д.) В разных направлениях.

Также заслуживает внимания applyForce: atPoint: Это позволяет указать, в какой точке объекта применяется сила. Например, если вы имитировали воздушный шар со струной, строка применяла бы его вес к нижней части баллона, тогда как подъем базы в воздушном шаре был бы нанесен на центр баллона. Применение силы в другом месте, чем в центре тяжести, приведет к вращению объекта.

Наконец, у вас есть соответствующий applyAngularImpulse: и applyTorque:, которые позволяют влиять на скорость вращения объекта. Это полезно, например, если вы хотите сохранить объект вертикально, несмотря на различные отскоки: вы можете применить крутящий момент, пропорциональный углу (или квадрат, если вы хотите избежать колебаний).

Все это очень хорошо документированы здесь: SKPhysicsBody

Но если вам нужно больше информации о физике самих потом посмотрят на Википедии: Newtonian Physics и связанное с ним страница (угловой момент, например).

Смежные вопросы