0

私は、五線譜クラス(CCNode)と音符クラス(CCSprite)を持つ記譜アプリに取り組んでいます。

次のような音符が五線譜に追加されます。

// MusicStaff.m
[self addChild:note];

ノートにはパーティクルエミッターがあり、これを親に追加する必要があります。私は次のようなことをしていると思います。

// Note.m
[self.musicStaff addChild:self.emitter];

ノートがスタッフをコントロールするという考えが好きではないので、かっこいいとは言えません---スタッフを、子供が何を持っているかをコントロールするものと考えるのが好きです。

このパーティクルエミッターは、技術的には音符の一部であり、音楽スタッフの一部ではないため、音符の子である必要があると正直に感じています。したがって、音楽スタッフに追加することは本質的に間違っていると感じます。ただし、cocos2dについて私が理解していることから、CCSpriteに子を追加することはできますが、スプライトは子の描画を管理しないため、このパーティクルエミッターは表示されません。

とは言うものの、これを実行する唯一の方法はスタッフにエミッターを追加することであると私が知っている限り、私は次のことを行うことを好みます。

// MusicStaff.m
[self addChild:note];
[self addChild:note.emitter];

ただし、私のプロジェクトのチームメンバーは、これは「後方」で「ダム」であり、メモはエミッタをその親に直接追加する必要があると感じています。これについての私の考えが本当に「後ろ向き」で「ばかげている」かどうか、または私が有効なポイントを持っているかどうかについて、フィードバックを求めています…</ p>

また、この問題を解決する別の方法があるかどうかも知りたいです。たとえば、エミッターをノートに直接追加して、その子を何らかの方法で描画させるなどです。

4

2 に答える 2

0

オブジェクト指向設計に関して言えば、エミッターがその親であるノートによって作成された場合、それ自体をスタッフに追加するべきではないと思います。誰かが Staff と話さなければならない場合、それを直接の子である Note にします。さらに良いことに、ノートがスタッフからの質問に応答するようにします。最終的には、スタッフが何を表示したいかを制御します。

于 2012-09-26T07:33:05.277 に答える
0

パーティクルをスプライトの子として追加すると、それらが描画されます。子ノードが描画されないという考えを与えたリソースが何であれ、それは間違っています。

あなたが誤解していると思うのは、スプライトのバッチ処理の問題です。その場合、CCSpriteBatchNode を使用すると、バッチ ノードとバッチ ノードの子にのみ CCSprite オブジェクトを追加できます。その場合、パーティクル エフェクトまたはその他のノードをスプライト バッチ スプライトの子として追加しようとすると、cocos2d でアサーションが発生し、これが違法であることが通知されます。

「愚かさの問題」について: どちらのオプションも本当に愚かではありませんが、親にエミッターを追加すると、本質的にノートの責任であるノートのパーティクル エフェクトの寿命を管理することをノートが制御できるという点で小さな利点があります。

于 2012-09-26T12:11:31.650 に答える