2015-02-03 2 views
0

У меня есть SKSpriteNode с текстурой со значительным альфа-маржами вокруг него. Текстура 92х92 точек; осязаемая рамка узла заканчивается намного меньшим (40x40) из-за альфа-поля. Я бы хотел, чтобы прикосновение регистрировалось, если оно происходит где угодно в текстуре 92x92.nodesAtPoint не находит мои узлы

Я обнаруживаю узлы в контактах с помощью узловAtPoint. Однако, если вы касаетесь альфа-поля, узел не обнаружен. Я попытался изменить это, переопределив calcAccumulatedFrame в моем SKSpriteNode, но, похоже, ничего не сделал. Мой метод редко и непредсказуемо называется. Я предполагаю, что если узел не имеет дочерних элементов, SpriteKit ссылается на свойство frame без использования метода calculateAccumulatedFrame.

Любые решения?

+0

Я не совсем понимаю. Ваше изображение больше 92x92, но оно заканчивается этим размером из-за прозрачных полей? Вы хотите, чтобы прикосновения регистрировались на большем кадре, чем кадр спрайтов? – hamobi

+0

Я обновил вопрос. Я использую текстуры 92x92, которые отлично зарекомендовали себя, но когда я добавил к ним больше невидимого поля, я заметил, что прикосновение не регистрируется нигде внутри текстуры - только внутри середины, которая не имеет альфы. –

+0

с моей головы .. вы можете добавить свой спрайт к другому спрайту с четким цветом. вручную установите размер родительского спрайта на 92x92? – hamobi

ответ

0

Я не знаю, как на самом деле изменить способ, которым SpriteKit ведет себя в отношении альфы в текстурах, но в качестве альтернативного решения я перегрузил узлы моей сценыAtPoint.

Если вам нужно сделать это по какой-либо причине, имейте в виду, что точка происхождения CGRect находится в левом нижнем углу прямоугольника, а не в центре, как у SKNode.

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