4

我有一个 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
4

2 回答 2

1

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

-(void)update:(CFTimeInterval)currentTime {

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

}

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

于 2014-05-07T00:08:05.800 回答
0

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

于 2014-05-06T06:16:05.910 回答