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];