Я планирую платформерную игру для iOS с помощью SpriteKit и Swift. Я провел некоторое исследование о том, как обрабатывать столкновения с игроком спрайта и наткнуться на эту статью.Столкновение черепахи SpriteKit с изогнутыми или наклонными напольными плитами
http://www.learn-cocos2d.com/2013/08/physics-engine-platformer-terrible-idea/
В этой статье советы вы не использовать встроенный в физике двигатель SpriteKit но реализовать такие вещи, как двигаться, прыгать и обработки столкновений самостоятельно. Учебник по платформе на сайте Рэя Вендерлиша предлагает аналогичный подход.
Пока все хорошо, но давайте поговорим о напольной плитке, на которой игрок может стоять. Пользовательская реализация физики была бы простой, если плитки прямоугольные и имеют плоскую поверхность (например, в руководстве от Ray Wenderlich), так как вы использовали CGRectIntersectsRect для обнаружения столкновения. Но как вы проверите столкновение игрока с изогнутыми или наклонными плитами? Из того, что я прочитал, CGRectIntersectsRect не учитывает прозрачный пиксель внутри sprites rect.
http://i.stack.imgur.com/lRP2Q.png
Посмотрите на выше плитки, например. Белая область (верхний левый) будет прозрачной. Теперь, если игровой спрайт опустится на эту плитку, столкновение будет обнаружено на верхней границе прямоугольника плитки, хотя там нет наземных пикселей (синяя область, справа внизу). Так что в конечном счете игрок будет парить в воздухе над этой плиткой. Я мог бы нажимать кнопку спрайта на несколько пикселей, но это немного взломано и становится сложнее, если изогнутые напольные плитки имеют разные углы наклона.
Итак, вопрос в том, как я могу справиться с этими типами столкновений с одним только SpriteKit (никаких дополнительных фреймворков, таких как Cocos2D, Kobold Kit, ...)? Или этот подход совершенно неправильный, и столкновения в платформере с SpriteKit должны быть сделаны принципиально разными?
Любая помощь очень ценится!
Хорошо, это интересно. Думаю, я попытаюсь использовать встроенную физику. Еще одна мысль: добавляете ли вы все физические тела для всех узлов при загрузке карты или динамически назначаете тела, когда узлы собираются войти в область просмотра (если ваш уровень больше, чем область просмотра, и он прокручивается, как вы переехать)? Я полагаю, что если у вас действительно большая карта, имитация всех тел (даже тех, которые находятся за пределами области просмотра), может оказать огромное влияние на частоту кадров. Есть ли у вас опыт в отношении максимального количества тел, которые SpriteKit может обрабатывать до замедления? – snorge
@snorge - Ответ на ваш вопрос - это серая область. Все зависит от того, что еще происходит в вашей сцене, сколько других узлов, физических тел, действий и т. Д. Вы можете удалить физические тела FromParent, которые находятся вне экрана, но это снова зависит от вашего игрового кода. Например, если у вас есть враг, который все еще ходит, удаление пола приведет к его забвению. Что касается максимального количества узлов, опять же это зависит от того, что еще происходит. Вам нужно будет запустить несколько тестов и посмотреть, что лучше всего подходит вашему коду. – sangony
Хорошо, я попробую и посмотрю сам. Большое вам спасибо, ваш ответ дал мне некоторое представление и на самом деле мне очень помог. – snorge