4

タイプUIViewのメインビューがあります。このビューには、横向きのみの 2 つの skview (左右) があります。すべてのビューとシーンは、黒の背景に設定されています。

2 つの skview を非表示にして始めます。メイン画面では、画面の両側に質問が表示されます。答えが間違っている場合は、シーンをエフェクトに設定し、そのエフェクトを有効にして、skview (左または右) を再表示します。効果は数秒間表示された後[self.leftView presentScene:nil];、rightView で同じことをして無効にします。次に、ビューを再び非表示にします。

問題は、シーンが表示されるときに、シーンが黒い背景で適切にレンダリングされる前に、ビューが白い色で一瞬点滅することです。実際、これが、黒に設定しているにもかかわらず、明るい背景で表示されないかのように、最初からskviewを非表示にすることにした理由です。

明るい背景色のフラッシュなしでこれらのシーンを表示するにはどうすればよいですか?

いくつかの代表的なコード:

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

この問題を解決するには、単純に黒の別のシーンを作成しました。離れたいシーンをゼロに設定する代わりに、単に黒いシーンに置き換えます。何もないシーン (空白の 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 に答える