Я провел два дня, пробуя разные идеи, но не нашел ничего лучше того, что я разместил в другом моем ответе. Как упоминалось там, это способ, рекомендованный сотрудником Apple, и, насколько я знаю, это самый эффективный способ, чтобы SpriteKit автоматически добавлял физические тела ко всем вашим тайлам. Я протестировал его, и он работает. (Хотя я все еще жду, когда Apple добавит простой способ размещения физических тел на тайлах).
Но есть и другие соображения. Если у вас проблемы с производительностью из-за того, что в вашей сцене слишком много физических тел, вы можете попробовать один из этих других подходов. Однако оба они требуют больше времени, чем подход, описанный выше. Единственная причина, которая может оправдать использование одного из этих более трудоемких подходов, заключается в том, что вам нужно уменьшить количество физических тел в вашей сцене из-за проблем с производительностью. В противном случае, я думаю, что «автоматический» подход, упомянутый выше, является лучшим вариантом, который у нас есть.
Поэтому я не буду вдаваться в подробности здесь, потому что я думаю, что автоматический вариант является лучшим. Это просто идеи для альтернативных подходов, если ваша игра должна быть очень скупой на системные ресурсы.
Альтернативный подход № 1 — использование меньшего количества физических тел
Создайте свою тайловую карту в редакторе. Затем продолжайте работать в редакторе, перетаскивая цветные спрайты (SKSpriteNodes
) по частям вашей карты, которым требуется физическое тело. Сформируйте узлы так, чтобы получился максимально большой прямоугольник для областей, которым нужны физические тела. Это лучше всего работает для больших плоских поверхностей, таких как стены, полы, потолки, платформы, ящики и т. д. Это утомительно, но в итоге вы получите гораздо меньше физических тел в вашей симуляции, чем если бы вы использовали автоматический подход, упомянутый выше.
Альтернативный подход № 2 — не использовать физические тела
Эта идея, вероятно, потребует еще большей работы, но потенциально вы можете вообще избежать использования физических тел. Сначала создайте свою тайловую карту в редакторе. Проанализируйте свою карту, чтобы определить, какие плитки обозначают барьер, за который игрок не должен переходить. Назначьте идентификатор пользовательских данных для этого типа плитки. Вам потребуются разные категории идентификаторов для разных типов барьеров, и вам также может понадобиться разработать дизайн, соответствующий этому подходу.
Как только ваши плитки барьера будут достаточно идентифицированы, напишите код, который проверяет значение пользовательских данных для плитки, в настоящее время занятой спрайтом игрока, и соответствующим образом ограничивает движение спрайта. Например, если игрок вводит заголовок, обозначающий верхнюю границу, ваш код перемещения не позволит спрайту игрока двигаться вверх. Точно так же, если игрок входит в плитку, которая отмечает крайнюю левую границу, ваш код движения не позволит игроку двигаться влево.
person
peacetype
schedule
16.03.2018