Могу ли я перемещать динамические физические тела с помощью SKAction, когда требуется только обнаружение контакта?

Я смотрю на учебник, где вещи определены следующим образом:

  • самолеты - это спрайты с телами динамической физики
  • перемещение плоскости осуществляется действиями по пути
  • обнаружение контакта между пулей и самолетом
  • пуля - это спрайт, и ее физическое тело настроено как статичное (что, на мой взгляд, немного необычно)

Вот ссылка на руководство для получения дополнительной информации.

Вопросы:

  1. Когда мы используем действия для перемещения физических тел, есть ли разница в том, как мы устанавливаем динамическое свойство тела? Потому что пуля статична, но проблем с движением нет.

  2. Когда у нас есть такая ситуация, когда нам не нужно обнаружение столкновений, а просто обнаружение контакта, и мы не можем перемещать спрайты (врагов), применяя силы или импульсы, какой хороший подход? Правилен ли этот подход?

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

На SO есть сообщения, в которых предлагается не использовать действия для перемещения тел динамической физики. Я понимаю, что мы не можем использовать этот подход во всех случаях. Например, это не будет работать для движущейся платформы с другим объектом на ней, потому что не будет правильной физической симуляции между телом на платформе и платформой, перемещаемой действием. Но в случаях, как в этом уроке, где нам нужно только обнаружение контакта для объекта, который можно перемещать только действиями (перемещаться по пути), я полагаю, это не проблема?


person Whirlwind    schedule 06.02.2015    source источник


Ответы (1)


  1. статический означает, что на тело не влияет физика. Это не означает, что его нельзя вручную переместить или переместить. Поэтому, если что-то настроено на статику, оно участвует в моделировании физики, но не затрагивается им. Представьте себе самолет, врезавшийся в гору. Самолет динамичен, гора просто будет сидеть там, хотя и участвует в физике. Но вы все еще можете перемещать эту гору вручную, используя позицию или действие.

  2. Не совсем понял ваш вопрос, но попробую.

Вы можете перемещать physicsBody вручную (используя свойство position или действия), но вам нужно спросить себя, почему вы это делаете. Обычно вы не хотите этого делать, потому что они обходят симуляцию физики. Если вы заставляете его двигаться, какой смысл вообще использовать физическое тело... верно?

Но если ваше физическое тело представляет собой что-то вроде бонуса, который полностью статичен, и вы просто хотите, чтобы оно двигалось по кругу с помощью действия, тогда все в порядке. Вы, вероятно, просто хотите использовать обнаружение контакта для пули, усиления и т. д., фактически не перемещая его с помощью физики. В этом нет ничего плохого.

person hamobi    schedule 06.02.2015
comment
Эй, хамоби, спасибо за быстрый ответ. Да, я думал о перемещении вражеских кораблей (а также бонусов) с действием, потому что я хочу перемещать их по разным предопределенным путям (CGPath). Это нелегко сделать с помощью сил... Физические тела (для пули, самолета или включения питания) в данном конкретном случае здесь для обнаружения контакта, потому что я считаю, что это проще, чем реализовать собственное обнаружение контакта с помощью таких методов, как CGRectIntersectsRect. Спасибо за объяснение и помощь. Мне просто нужно было знать, является ли этот подход законным :) - person Whirlwind; 06.02.2015
comment
Да, если вам нужно только обнаружение контакта, но не реакция на столкновение (т. е. предотвращение проникновения тел друг в друга, изменение направления из-за столкновения и т. д.), то перемещение физических тел с действиями — это нормально. - person LearnCocos2D; 06.02.2015