有没有人知道如何使用spritekit for iOS使用不规则形状节点裁剪图像?问题是当我对它进行skcrop时,形状有2层,因此裁剪失败。要裁剪一个必须使用单个图层。任何想法如何在场景加载之前首先栅格化形状?我已经尝试过skeffectnode和shouldRasterize但它也失败了,很可能是因为它也包含2个子节点,或者在加载场景后发生了光栅化。我也尝试将形状转换为纹理,但由于与skeffectnode相同的原因而失败。我已经看过堆栈溢出的其他可能的解决方案,似乎没有工作或非常局限于正方形,所以我认为这是一个必须只存在于iOS7中的bug,所以请不要说这是重复不让我先检查副本,以确保它真的是一个。
现在所有迹象都表明没有使用带填充的skshapenode裁剪图像。
答案 0 :(得分:2)
我基本上保持包装直到它工作。结束所有解决方案似乎是创建一个SKEffectNode并将我的SKShapeNode添加为SKEffectNode的子节点。但这还不够。我还必须将SKEffectNode包装在SKSpriteNode中。最后,添加SKSpriteNode作为SKCropNode的maskNode。请参阅下面的代码。我还有其他可能对解决方案有帮助的设置。
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];