将 SKSpriteNode 添加到 SKEffectNode 时出现 Metal 崩溃

Metal crash upon adding SKSpriteNode to SKEffectNode

提问人:user3765506 提问时间:2/22/2017 最后编辑:naideuser3765506 更新时间:7/2/2020 访问量:358

问:

> -[MTLDebugRenderCommandEncoder setScissorRect:]:2028: failed assertion (rect.x(0) + rect.width(1080))(1080) must be <= 240

使用以下代码将简单添加到 a 时,我遇到了此崩溃SKSpriteNodeSKEffectNode

    SKSpriteNode *warpSprite = [SKSpriteNode spriteNodeWithImageNamed:@"art.scnassets/symbol.png"];
    SKEffectNode *entryEffectsNode = [[SKEffectNode alloc] init];
    [entryEffectsNode addChild:warpSprite];
    [self addChild:entryEffectsNode];

我没有在我的项目中的其他任何地方触及这些节点,当我更改精灵时,(必须是 <=value)中的值在错误中发生变化。

编辑:我用一个简单的图像替换了精灵图像,并且(<=value)始终是精灵大小的两倍。此外,还应该注意的是,SKScene 被用作 SceneKit 场景中的叠加层。spriteNodeWithColor:Size:

我使用以下代码创建了一个单独的 SKScene,但仍然导致相同的错误。

@implementation testScene
    
    -(id)initWithSize:(CGSize)size {
        if (self = [super initWithSize:size]) {
            
            SKSpriteNode *testSprite = [SKSpriteNode spriteNodeWithColor:[SKColor purpleColor] size:CGSizeMake(100, 100)];
            SKEffectNode *testEffect = [[SKEffectNode alloc] init];
            [testEffect addChild:testSprite];
            [self addChild:testEffect];
            
        }
        return self;
    }
@end

编辑 2: 我刚刚将上述场景测试为默认 SceneKit 项目的叠加层,它崩溃并出现相同的错误。

编辑 3: 我使用 swift 重现了这一点。 Bug 报告已提交给 Apple。

ios objective-c 精灵套件 swift3 skeffectnode

评论

0赞 Knight0fDragon 2/24/2017
你的矩形大于支持的,[SKSpriteNode spriteNodeWithImageNamed:@“art.scnassets/symbol.png”] 应该是 [SKSpriteNode spriteNodeWithImageNamed:@“symbol”] 这样它就可以正确处理视网膜图形,除此之外,我们还需要了解更多
0赞 user3765506 2/25/2017
更改后,我仍然收到相同的错误。你还需要知道什么?我刚刚在一个新项目中运行了相同的代码,它的工作方式正如您所期望的那样。我用一个简单的 spriteNodeWithColor:Size: 替换了 sprite 图像,并且 (<=value) 始终是 sprite 大小的两倍。
1赞 rickster 3/1/2017
可能是一个错误。向 Apple 提交一份文件以确保。
0赞 stipus 12/16/2019
您确定您的initWithSize方法是在主线程上调用的吗?使用 SKScene 作为 SCNScene 覆盖时,所有 SKNode 操作都必须从主线程运行。
0赞 KugelnMMXVI 9/13/2020
错误报告的当前状态如何?

答: 暂无答案