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

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

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

1 ответ

Решение

Я в основном продолжал оборачивать это, пока это не работало. В конце концов, все, что нужно, - это создание 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];
Другие вопросы по тегам