2009-10-25 9 views
5

私はレイヤー内に多くのスプライトがあるゲームに取り組んでいます。スプライトに触れると、何かができます。iphone zのココス2dの順番

私の問題はzオーダーの問題です。私のスプライトの大部分は重なっていて、重ね合わせているスプライトに触れると、背後にあるスプライトが前面のスプライトの代わりに反応します。

私はcocos2dのzオーダーについてもっと理解する必要があります。

実行時にzオーダーを変更するにはどうすればよいですか?

ありがとうございました!

答えて

2

0.8のTouch Dispatcherを使用していますか?

v0.7.x(標準)やその時のワンタッチ(ターゲット)のようなタッチを送出するシングルトン。ターゲットタッチを使用する利点は、あなたが主張するタッチのイベント(開始、移動、終了、キャンセル)のみを受け取ることです。ターゲットを絞ったタッチを使用すると、マルチタッチとシングルタッチの両方でタッチ操作コードが簡素化されます。複雑なタッチ操作コードが必要な場合を除き、Targeted touchesの使用が推奨されます。

新しいTouchDispatcherのもう1つの利点は、優先度キューがあることです。そのため、タッチコンシューマの位置を変更できます。

優先キューを使用して、必要な処理を実行できます。各スプライトの優先順位を設定して、どのスプライトが最初にタッチするかを定義することができます。また、スプライトが最初にタッチするかどうかを定義することができます。

タッチがcocos2dプロジェクトの例をテストするには、おそらく見て最高の場所です:http://code.google.com/p/cocos2d-iphone/source/browse/trunk/tests/TouchesTest(特にPaddle.mクラス)

あなたはタッチディスパッチャの優先順位を設定することができ、あなたのスプライトクラスのフォーカス取得時の方法で:

- (void)onEnter 
{ 
    [[TouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; 
    [super onEnter]; 
} 

優先度の高いデリゲートは、優先度の低いデリゲートの前に応答します。

+1

実際には:優先度が低いほど優先度が高くなります。 0は最低値ではありません。 優先順位にZオーダーを使用するには、Zオーダー* -1を優先順位とし、「最高」のZオーダーが最初にタッチを受け取ります。 – nash

5

Zオーダーとタッチハンドリングシステムは別々です。 Zオーダーはレイヤーのビジュアルレイアウトの場合のみです。ただし、タッチ・ハンドリング・システムは、タッチ・ディスパッチャーに登録するときに割り当てられた優先順位に依存します。同じ優先順位を持つタッチ・ディスパッチャーで2つのレイヤーを登録すると、レイヤーのZ順序にかかわらず、2番目のレイヤーが最初にタッチされます。

私は同じ問題があったときに私が本当に混乱していた部分です。 Z Orderは視覚的に高い数字を重ねて表示しますが、タッチとは正反対です。より低い優先順位の数字が実際に触れています。私自身の正気を保つために、コードをリファクタリングして、可能な限りZインデックスと同じ順序でレイヤーを追加したので、トップレイヤーのタッチが直感的に動作するようにしました。

これが不可能な場合は、私はタッチ優先度システムを使用します。後で混同しないように定数を定義します。、優先度システムを使用してタッチの登録以下を使用する:

-(void) registerWithTouchDispatcher { 
[[TouchDispatcher sharedDispatcher] addTargetedDelegate:self priority: DEFAULT_TOUCH_PRIORITY swallowsTouches:YES]; 

}

0

する紙の層と考えます。 1は0の上にあります.0は-5の上のどこかにあります。 16が14を超えています。つまり、負の数または正の数を使用するかどうかにかかわらず、高い数値は低い数値の上にあります。

関連する問題