Ios SKView在场景前闪烁灰色

Ios SKView在场景前闪烁灰色,ios,sprite-kit,skscene,skview,Ios,Sprite Kit,Skscene,Skview,我有一个UIView类型的主视图。此视图有两个仅横向的skview(左视图和右视图)。所有视图和场景都设置为黑色背景 我从隐藏的两个视图开始。主屏幕在屏幕两侧显示问题。如果答案不正确,我将场景设置为效果,然后启用该效果并取消隐藏skview(左或右)。效果会显示几秒钟,然后我用[self.leftView presentScene:nil]禁用它我对rightView执行相同的操作。然后我再次隐藏视图 问题在于,当显示场景时,在使用黑色背景适当渲染场景之前,会有短暂的白色视图闪烁。事实上,这就是

我有一个UIView类型的主视图。此视图有两个仅横向的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];
至于场景效果本身:

    @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

在iOS上,您不能同时拥有2个(或更多)SKView实例。虽然它在技术上可行,但乍一看它实际上是不可用的,因为一个视图将支配其他视图,而其他视图几乎没有时间更新和呈现其内容,以及接收触摸和其他事件。我怀疑短暂的闪光与此有关。

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

-(void)update:(CFTimeInterval)currentTime {

[self addChild:[self blackEffect]];
[self.view setPaused:YES];
}


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

不需要运行两个视图就可以实现这一点。例如,用户可能会在左侧错误地得到一个问题,这会在右侧的skview处于休眠状态时在左侧产生火焰效果。闪光仍将出现在左侧。同样,这两个视图都不需要渲染场景才能实现。在渲染具有不同颜色的场景之前,SKView的背景看起来是灰色的。我无法使未填充的SKView具有黑色背景。我认为当场景被移除,然后渲染一个新的场景时,它会闪烁默认的灰色。如果我将SKView放在UIView上,而不执行其他操作,则无论我告诉它如何设置背景色,它都会显示灰色。