Предположим, что есть сцена следующим образом: Существует сцена с тем же размером, что и рамка устройства. Сцена имеет красный шар, который способен двигаться по всему миру. Этот мир определяется черными и белыми областями, где мяч ТОЛЬКО способен перемещаться в белой области. Вот изображение, которое поможет объяснить: Как сделать PhysicalBody на основе альфа-значений
Части черной области можно стереть, как если бы пользователь рисовал белым цветом над сценой. Это будет означать, что область, в которой шар может перемещаться, постоянно меняется. Теперь, как можно было бы реализовать физическое приложение для края между белой и черной областями?
Я пробовал переопределять физическое устройство каждый раз, когда он изменяется, но как только форма становится достаточно сложной, это не является жизнеспособным решением. Я попытался создать двумерный массив «ящиков», которые невидимы, и указать, будет ли большая часть области внутри каждого окна белой или черной, и если мяч коснулся коробки, которая была черной, она была бы отброшена назад. Однако для этого требовалось тяжелое рендеринг и многократное повторение массива. Поскольку в моем исходном массиве содержались ящики размером чуть больше пикселя, я попытался сделать эти боксы более крупными, чтобы немного смягчить движение, но это в конечном итоге привело к тому, что часть шара была остановлена белыми областями и оказалась внутри черной области. Это было нежелательно, так как пользователь мог чувствовать невидимые барьеры, которые они, казалось, бьют.
Я попытался найти другие методы для реализации этой сцены типа «разрушаемая местность», но решения, которые я нашел и попытались, использовали другие игровые движки. Для дальнейшего уточнения, я использую Objective-C и Apple SpriteKit framework; и я не ищу подробный класс, полный кода, а скорее некоторые идеи псевдокода или реализации, которые привели бы меня к решению.
спасибо.
По существу вам нужен алгоритм контурной трассировки, который создает CGPath контура пещеры. Каждый раз, когда пещера изменяется, вам нужно повторно запустить этот алгоритм и заменить существующий корпус контура. Однако эта форма отслеживания и воссоздания, вероятно, запрещает использование этого в реальной игре действий или где пещера может меняться практически все время. – LearnCocos2D
Мне жаль, если я не был достаточно ясен, это было первое решение, которое я попытался. Это было возможно сначала (где пещера начиналась с небольшого белого круга); но, как вы сказали, это было бесполезно, как только край стал сложной формой из-за постоянных изменений. – Andriko13