2013-12-09 6 views
6

Я знаю, что для традиционных UIViews я могу установить флажок «включить взаимодействие с пользователем» в НЕТ, и представление больше не будет реагировать на касания, позволяя представлениям ниже их получать штрихи.iOS7 Sprite Kit Как отключить прикосновения к спрайту, чтобы он «пронзил»?

Есть ли способ реализовать те же функции «прокрутки» в комплекте Sprite? До сих пор я видел, как люди, использующие «Touches», начали, поняли смысл и спросили сцену о узлах в этой точке.

Проблема с этим подходом - если я хочу добавить наложения поверх спрайтов (например, точки жизни монстров и т. Д.), Они также будут реагировать на касания. Пока я пытаюсь избежать этой проблемы, создавая пользовательские классы для разных узлов, а затем имея очень большой оператор if, проверяя класс каждого узла.

Есть ли лучший способ достичь «сквозной» функциональности для комплекта спрайтов?

+0

Можете ли вы просто установить 'node.userInteractionEnabled = NO;'? – Evan

ответ

16

Если вы установили свойство userInteractionEnabled в YES на подклассу SKSpriteNode, то делегаты вызова вызовут внутри класса. Следовательно, вы можете справиться с прикосновением для спрайта в своем классе.

Однако по умолчанию для свойства userInteractionEnabled установлено значение NO. Следовательно, прикосновение к спрайту по умолчанию является «проходом».

Итак, для наложений, которые вы хотите, создавать собственные классы для спрайтов, реализации touchesBegan: и других делегатов в рамках этого класса и в то время инициализации, установите userInteractionEnabled свойство YES.

+0

Мне жаль, что я не смог бы увеличить его количество раз, это сделало мою жизнь намного проще. –

+0

@akashg - Здесь проблема, и я не уверен, как это ее решило. У меня есть сцена (userInteractionEnabled = NO), содержащая специальный спрайт со случайным наложением (userInteractionEnabled = NO), проходящим через него. Пользовательский спрайт хорошо слышит краны, пока над ним не наложено, и тогда они ничего не слышат. Как заставить краны проходить через оверлей, чтобы справиться ниже? Благодаря! – wanderlust

+0

@wanderlust - это зависит от дерева узла. Поскольку для свойства userInteractionEnabled для наложений установлено значение НЕТ, тогда кран будет перехвачен родительским оверлеем или так далее, пока узел не станет интерактивным. Здесь я предполагаю, что родитель - это сцена. Вам придется реализовать некоторые функции в сенсорных делегатах сцены, которые «передают» прикосновение к узлу, который лежит на сенсорной точке. – ZeMoon

6

Sprite Kit использует значение zPosition только для определения теста на удар и порядка рисования.

Таким образом, вы можете поставить все свои спрайты выше 0, если вы не хотите ударить их. И тогда таким простым логическим тестом является zPostion> 0