1

Предположим, что есть сцена следующим образом: Существует сцена с тем же размером, что и рамка устройства. Сцена имеет красный шар, который способен двигаться по всему миру. Этот мир определяется черными и белыми областями, где мяч ТОЛЬКО способен перемещаться в белой области. Вот изображение, которое поможет объяснить: Picture of the sceneКак сделать PhysicalBody на основе альфа-значений

Части черной области можно стереть, как если бы пользователь рисовал белым цветом над сценой. Это будет означать, что область, в которой шар может перемещаться, постоянно меняется. Теперь, как можно было бы реализовать физическое приложение для края между белой и черной областями?

Я пробовал переопределять физическое устройство каждый раз, когда он изменяется, но как только форма становится достаточно сложной, это не является жизнеспособным решением. Я попытался создать двумерный массив «ящиков», которые невидимы, и указать, будет ли большая часть области внутри каждого окна белой или черной, и если мяч коснулся коробки, которая была черной, она была бы отброшена назад. Однако для этого требовалось тяжелое рендеринг и многократное повторение массива. Поскольку в моем исходном массиве содержались ящики размером чуть больше пикселя, я попытался сделать эти боксы более крупными, чтобы немного смягчить движение, но это в конечном итоге привело к тому, что часть шара была остановлена ​​белыми областями и оказалась внутри черной области. Это было нежелательно, так как пользователь мог чувствовать невидимые барьеры, которые они, казалось, бьют.

Я попытался найти другие методы для реализации этой сцены типа «разрушаемая местность», но решения, которые я нашел и попытались, использовали другие игровые движки. Для дальнейшего уточнения, я использую Objective-C и Apple SpriteKit framework; и я не ищу подробный класс, полный кода, а скорее некоторые идеи псевдокода или реализации, которые привели бы меня к решению.

спасибо.

+1

По существу вам нужен алгоритм контурной трассировки, который создает CGPath контура пещеры. Каждый раз, когда пещера изменяется, вам нужно повторно запустить этот алгоритм и заменить существующий корпус контура. Однако эта форма отслеживания и воссоздания, вероятно, запрещает использование этого в реальной игре действий или где пещера может меняться практически все время. – LearnCocos2D

+0

Мне жаль, если я не был достаточно ясен, это было первое решение, которое я попытался. Это было возможно сначала (где пещера начиналась с небольшого белого круга); но, как вы сказали, это было бесполезно, как только край стал сложной формой из-за постоянных изменений. – Andriko13

ответ

3

Если ваша цель развертывания IOS 8, это может быть то, что вы ищете ...

+ bodyWithTexture:alphaThreshold:size: 

Вот описание из документации компании Apple

Создает физика тела от содержания текстуры. Только тексеры , которые превышают определенное значение прозрачности, включены в физику .

где тексель является элементом текстуры. Перед созданием SKPhysicsBody вам нужно будет преобразовать изображение в текстуру.

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

+0

Спасибо за потрясающую идею, я не знал, что у iOS 8 была эта возможность. Моя оригинальная идея состояла в том, чтобы иметь отверстие внутри тела (или много разных отверстий, если на то пошло).Я собираюсь разбить мою текстуру на многие части, а затем использовать каждую часть как отдельное тело (чтобы иметь возможность реализовать отверстия). Однако, если отверстие достаточно мало, оно все равно не будет его отображать. Любая идея, как я мог бы реализовать «дыру» без нескольких текстур? – Andriko13

+0

Я лично буду нацелен на iOS 8 для этого типа игры. Для его реализации потребуется гораздо больше усилий, и я бы предположил, что физические тела будут лишь приблизительным приближением форм, которые пользователь сможет нарисовать. – 0x141E

+0

Цель IS iOS8, я никогда не говорил иначе. Но если в середине текстуры есть дыра, то spritekit не узнает ее – Andriko13

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