场景前 SKView 闪烁灰色

C6S*_*ver 5 ios sprite-kit skview skscene

我有一个 UIView 类型的主视图。该视图有两个仅横向的 skview(左和右)。所有视图和场景均设置为黑色背景。

我从隐藏的两个 skview 开始。主屏幕在屏幕两侧显示问题。如果答案不正确,我将场景设置为效果,然后启用该效果并取消隐藏 skview(左或右)。该效果会显示几秒钟,然后我对[self.leftView presentScene:nil];rightView 执行相同的操作来禁用它。然后我再次隐藏视图。

问题在于,当显示场景时,在使用黑色背景适当渲染场景之前,会出现短暂的白色视图闪烁。事实上,这就是为什么我一开始就隐藏skviews,就好像我不这样做一样,尽管我将其设置为黑色,它们仍会以较浅的背景显示。

如何在不使用较浅背景颜色的情况下显示这些场景?

一些有代表性的代码:

self.fireSceneLeft = [FireScene sceneWithSize:self.leftView.bounds.size];
self.fireSceneLeft.scaleMode = SKSceneScaleModeAspectFill;
self.fireSceneLeft.backgroundColor = [UIColor blackColor];

[self.leftView presentScene:self.fireSceneLeft];
    [self.leftView setHidden:NO];
Run Code Online (Sandbox Code Playgroud)

至于场景效果本身:

    @implementation FireScene

-(SKEmitterNode *)fireEffect
{
    SKEmitterNode *emitter =  [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"FireEffect" ofType:@"sks"]];
    emitter.position = CGPointMake(150,80);
    emitter.name = @"fire";
    emitter.targetNode = self.scene;
    emitter.numParticlesToEmit = 2;
    return emitter;
}

-(void)update:(CFTimeInterval)currentTime {

    [self addChild:[self fireEffect]];
}

@end
Run Code Online (Sandbox Code Playgroud)

C6S*_*ver 1

我通过创建另一个纯黑色的场景解决了这个问题。我没有将我想要移开的场景设置为零,而是简单地替换为黑色场景。没有任何内容的场景(空白 SKView)具有灰色,这是我的问题的原因。通过使用黑色场景启动应用程序并在不应显示场景时使用它,我的问题得到了解决。这里的一个重要点是暂停场景。如果不暂停,即使是没有运动的黑色场景也会耗尽 CPU。我发现暂停黑色场景的最佳位置是场景控制器的以下方法:

-(void)update:(CFTimeInterval)currentTime {

[self addChild:[self blackEffect]];
[self.view setPaused:YES];
Run Code Online (Sandbox Code Playgroud)

}

这也很棘手,因为在其他地方暂停场景实际上会暂停较旧的场景。这是一个计时问题,因为即使您调用一个新场景然后暂停,它也没有时间在暂停之前将新场景到位。上面的方法是我可以可靠地调用暂停并使其在正确的场景上生效的唯一地方。