SKView在场景前闪烁灰色

时间:2014-05-06 05:02:29

标签: ios sprite-kit skscene skview

我有UIView类型的主视图。此视图在仅横向方向上有两个skview(左和右)。所有视图和场景都设置为黑色背景。

我从隐藏的两个skviews开始。主屏幕显示屏幕两侧的问题。如果答案不正确,我将场景设置为效果,然后启用该效果并取消隐藏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

2 个答案:

答案 0 :(得分:1)

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

-(void)update:(CFTimeInterval)currentTime {

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

}

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

答案 1 :(得分:0)

在iOS上,您无法同时拥有2个(或更多)SKView实例。虽然它在技术上工作并且第一眼看上去实际上是不可用的,因为一个视图将主宰其他视图,留下很少的时间让其他视图更新和呈现它们的内容以及接收触摸和其他事件。我怀疑短暂的闪光与此有关。