【问题标题】:iOS 7 iPad SpriteKit - Use irregular SKShapeNode as mask for SKCropNodeiOS 7 iPad SpriteKit - 使用不规则的 SKShapeNode 作为 SKCropNode 的掩码
【发布时间】:2014-05-28 21:08:30
【问题描述】:

有谁知道如何使用 spritekit for iOS 使用不规则形状节点裁剪图像?问题是当我对其进行 skcrop 时,形状有 2 层,因此裁剪失败。要裁剪一个必须使用单层。知道如何在加载场景之前先栅格化形状吗?我已经尝试过 skeffectnode 和 shouldRasterize ,但这也失败了,很可能是因为它也包含 2 个孩子,或者在加载场景后发生光栅化。我也尝试将形状转换为纹理,但由于与 skeffectnode 相同的原因而失败。我已经查看了有关堆栈溢出的其他可能解决方案,但似乎没有一个有效或仅限于正方形,所以我认为这是一个只能存在于 iOS7 中的错误,所以请不要说这是重复的没有让我先检查副本以确保它确实是一个。

现在所有迹象都表明不使用带有填充的 skshapenode 来裁剪图像。

【问题讨论】:

    标签: ios7 sprite-kit skshapenode skcropnode


    【解决方案1】:

    我基本上一直在包装它,直到它起作用。最终解决方案似乎是创建一个 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];
    

    【讨论】:

    • CropNode 和 ShapeNode 无法协同工作似乎是一个错误。正如@Robert 向您展示的那样,CropNode 仅响应 SKSpriteNodes。你可以在这里查看类似的讨论:(stackoverflow.com/questions/21816079/…)
    • 我很高兴看到我不是唯一一个追求嵌套直到它起作用的人。我以为我疯了,但它起作用了,现在我'这个例子让我感到很欣慰。是时候躺下。还有苏格兰威士忌,送给你,好先生!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多