0

CCScene といくつかの CCSprites がノードとして追加されています。次に、いくつかの巧妙な振る舞いをする CCSprite のサブクラス (これも同じ CCScene クラス インスタンスに追加されます) を作成します。このクラスがメイン シーンに追加された CCSprite ノードを参照し、それらのいくつかのプロパティ (可視性など) を変更できるようにしたいと考えています。私の現在の解決策は、Whatever クラスのメンバー変数として NSMutableArray へのポインターを追加することです。

CCScene クラスを使用して、Whatever クラスを介してこれらのアクションをトリガーします。たとえば、Whatever ノードの "TriggerAction" メソッドを特定の時間に呼び出します。このアクションは、同じ親 CCScene に属する CCSprites を変更します。

私は初心者ですが、潜在的に危険なように思えます。これは既知の設計パターンなのか、それともさらに悪いことに、既知の間違いなのか疑問に思っています。

このようなパターンを使用した経験はありますか? Cocos2D は Flash からいくつかの概念を継承しているため、タグとして「Flash」を追加しました。

編集:

触れたときに LevelIcon スプライトを表示するはずの特別なスプライト (惑星など) です。私の問題は、画面上の惑星の位置に対して levelIcons を配置したいということです。これを行う最も簡単な方法は、惑星を含むシーンにそれらを追加することでした。私は今、それらがWhateverサブクラスとして惑星にのみ追加される解決策を探求します..問題は、この方法でそれらをたくさん結合し、LevelIconsを必要としない他のシーンでWhateverクラスをリサイクルできないことです.

このパターンは有効ですか

4

1 に答える 1

1

これは問題のないパターンですが、兄弟が他の兄弟を保持しているため、メモリリークが発生する可能性があります。

より良い解決策は、スプライトを制御ノードの子にすることです。そうすれば、保持サイクルのリスクを冒すことはなく、スプライトへの参照を保持するために別の配列を用意する必要はありません。スプライトはすでに子配列に含まれているからです。タグを使用して、個々のスプライトを識別できます。

「Whatever」が実際に(必要に応じて)何も表示しない場合は、CCSpriteの代わりにCCNodeをスーパークラスとして使用する必要があります。

于 2012-12-08T09:55:00.113 に答える