0

追加の CCLayer を「GameScene」に追加しました。この CCLayer は[self addChild:_congratsScreen]、キャラクターが画面上で一定量のオブジェクトを収集するたびに表示されます ( )。

GameScene.h 内で子レイヤー ( CClayer *congratsScreen) を宣言し、GameScene.m で合成しています。GameScene のinitメソッドで子 CCLayer を割り当てているので、このインスタンス変数で子レイヤーへの参照を保持しています。

私の GameScene にはいくつかCCParticleSystemQuadのインスタンスがあり、両方を呼び出してパーティクル アニメーションを再生するのは非常に簡単stopSystemですが、子レイヤーで初期化されresetSystemた で同じことを実行しようとすると、削除後に が機能しません。私の GameScene からの子をもう一度追加します。親レイヤーのシーンから CCLayer のコンポーネントを削除すると、CCLayer のコンポーネントに何かが起こりますか?CCParticleSystemQuadresetSystem

現時点ではコードを持っていないので、それがどのように行われているかを説明するためにいくつかの疑似コードを書いてみます:

ChildLayer.m でどのように初期化されているか:

_sparkling= [CCParticleSystemQuad particleWithFile:@"sparkling.plist"];

次に、GameScene.m のどこかに次のものがあります。

- (void) showCongrats {
  //pathetic way to create a modal panel
  [self setTouchable = NO];

  [[[self _congratsLayer] _sparkling] resetSystem];
  [self addChild:_congratsLayer];
}
- (void) hideCongrats {
  //let them continue playing
  [self setTouchable = YES];

  [[[self _congratsLayer] _sparkling] stopSystem];
  [self removeChild:_congratsLayer];
}

したがって、最初に呼び出したときに機能しshowCongrats、参照は良好で、パーティクルを操作できますが、レイヤーを非表示にしてゲームを続行し、おめでとうパネルを再度表示すると、最後の呼び出し、resetSystemもはや機能しません。何か案は?

4

1 に答える 1

1

コードにいくつかのブレークポイントを追加して説明しますが、推測しなければならない場合は、removeChild を呼び出しているときに、init メソッドにあったデータが失われ、奇妙なことが起こっていると言えます。

于 2013-02-28T06:23:08.033 に答える