iOS 7 iPad SpriteKit — использование нестандартного SKShapeNode в качестве маски для SKCropNode

Кто-нибудь знает, как обрезать изображение с помощью spritekit для iOS, используя узел неправильной формы? Проблема в том, что когда я делаю на нем skcrop, фигура имеет 2 слоя, и поэтому кадрирование не удается. Для обрезки необходимо использовать один слой. Любая идея, как сначала растеризовать фигуру, прежде чем сцена будет загружена? Я пробовал skeffectnode и должен растеризовать его, но это тоже не работает, скорее всего, потому, что он также содержит 2 дочерних элемента, или растеризация происходит после загрузки сцены. Я также пытался преобразовать форму в текстуру, но это не удалось по тем же причинам, что и skeffectnode. Я просмотрел другие возможные решения по переполнению стека, и ни одно из них не работает или очень ограничено квадратами, поэтому я думаю, что это ошибка, которая должна существовать только в iOS7, поэтому, пожалуйста, не говорите, что это дубликат не позволяя мне сначала проверить дубликат, чтобы убедиться, что это действительно один.

Прямо сейчас все признаки указывают на то, что skshapenode с заливкой не используется для обрезки изображения.


person rardoz    schedule 28.05.2014    source источник


Ответы (1)


Я в основном продолжал оборачивать его, пока он не работал. Решение End all be all, похоже, заключалось в создании SKEffectNode и добавлении моего SKShapeNode в качестве дочернего элемента SKEffectNode. Но этого было недостаточно. Мне также пришлось обернуть SKEffectNode в SKSpriteNode. Затем, наконец, добавьте SKSpriteNode в качестве maskNode для SKCropNode. См. код ниже. У меня есть дополнительные настройки, которые также могут быть полезны для решения.

        SKCropNode *cropNode = [[SKCropNode alloc] init];

        SKEffectNode*rasterEffectNode = [SKEffectNode node];
        [rasterEffectNode addChild:ballShape];
        rasterEffectNode.shouldRasterize = true;
        ballShape.lineWidth = 0;
        ballShape.antialiased = true;
        [ballShape setStrokeColor:[SKColor clearColor]];
        ballShape.fillColor = [SKColor blackColor];

        SKSpriteNode*spriteWrapperFix = [SKSpriteNode node];
        [spriteWrapperFix addChild:rasterEffectNode];
        [cropNode setMaskNode:spriteWrapperFix];
        [cropNode addChild:sprite];
        [container addChild:cropNode];
person rardoz    schedule 07.06.2014
comment
Неспособность CropNode и ShapeNode работать вместе кажется ошибкой. Как показывает @Robert, CropNode отвечает только на SKSpriteNodes. Вы можете проверить подобное обсуждение здесь: (stackoverflow.com/questions/21816079/) - person Scott; 25.10.2014
comment
Я рад видеть, что я не единственный, кто использует принцип «гнездо, пока оно не сработает» как средство для достижения цели. Думал, что я сошел с ума, но это работает, и теперь я очень утешаюсь этим примером. Время немного полежать. И скотч, поднятый вам, добрый сэр! - person Confused; 05.11.2016