2015-03-24 2 views
1

Надеюсь, вы все сможете с этим справиться. Я работаю над приложением настольной игры. У меня есть шестигранные плитки, которые называются случайным образом и выложены в начале игры. Каждая из этих плиток имеет четыре стороны со значением 1, а две другие стороны имеют значения 2 и 3.Как обнаружить пересекающиеся узлы детей других SKSpriteNodes

Каждая плитка представляет собой SKSpriteNode с прозрачным прямоугольником Узлы по краям. Существует 5 различных типов плиток, и они должны быть отдельными Sprites с дочерними узлами, поскольку в дополнение к случайному расположению они также случайным образом вращаются. Поэтому мне нужно знать программно, какие края плитки касаются тех краев других плиток.

Как это:

https://app.box.com/s/nnym97st3xmrsx979zchowdq1qwsmpoo

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

Например: если «2» трогает «3» и т.д.

Я первый попробовал обнаружение столкновений, но, конечно, работает только с динамическими, движущихся объектов.

Я попробовал инструкцию IF, чтобы сравнить, касались ли другие узлы, а затем вспомнил, что координаты, которые относятся к родительскому узлу, так что это не сработало.

Я тогда попытался intersectsNode, но, похоже, работает только с узлами под одним и тем же родителем. В настоящее время я работаю с convertPoint, чтобы получить координаты в соответствии с сценой и, таким образом, быть сопоставимыми. Но я не могу заставить его работать так, как мне нужно.

Должно быть что-то простое, чего я не вижу. Есть идеи?

ответ

0

Наверняка не простой.

Одним из решений было бы начать все ваши формы, слегка отделенные друг от друга. Добавьте невидимые дочерние узлы с физическими телами на все шесть сторон и дайте каждому физическому телу соответствующую категорию, основанную на их рейтинге (1, 2 или 3).

Когда вы начинаете игру, переместите все внешние узлы в правильное положение (стороны касаются), используя любой способ передвижения, который вы предпочитаете. Это даст вам контактные сообщения, поскольку каждая сторона гексагона касается другого. Контактные сообщения будут сообщать вам, какой номер стороны касается своего соседа.

Точное кодирование этой идеи зависит от вашего текущего кода, игры и т.д ...

enter image description here

+0

Интересно. Я попробовал что-то подобное, если дочерние узлы двигались всего лишь на несколько пикселей при загрузке, но это не дало никаких результатов. Узлы были бы перекрыты при первоначальном размещении, может ли это предотвратить обнаружение столкновения? Если это так, я мог бы отрегулировать его, адаптировав свой метод выше и просто выбрав дочерние узлы из центра шестнадцатеричного элемента во внешние края. Это может быть проще, чем переместить все гексы. Большое спасибо! Я дам это испытание утром. ;-) – Freedlun

+0

@Freedlun - Перемещение гексов не так уж сложно. Если вы знаете конечные позиции каждого из них, вы можете использовать SKAction moveTo x, y по длительности. Гексы, идущие вместе, могут даже придать вашей игре прохладную анимацию запуска. – sangony

+0

Правда. На самом деле это именно то, что я сделал, хотя я сделал это с childern.Использование SKActions Я перемещаю спрайты Edge из (0, 0) в их местоположения, и он отлично работает! Обнаружен контакт. Теперь я могу перейти к другим аспектам игры. Спасибо! – Freedlun

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