cocococos 2 d-xにおけるCCScrrollViewとCCMenuのタッチ優先度の解決策について

1420 ワード

回転:http://www.cnblogs.com/yeshanghai/archive/2012/12/01/2797111.html
 
       最近cocococos 2 d-xを使ってプラットフォームにまたがるゲームを書いて、このような機能の需要があって、携帯電話のスクリーンのあるブロックの領域は上下にスクロールすることができて、スクロールエリアの内容はまたクリックすることができるボタンです.まずCCScrrollViewにCCMenuを追加したいです.ちょうどこのCCMenuは一枚一枚の写真で、つまりCCItemImageです.画像がスクロールエリア全体に覆われている時、CCScrrollViewがスライドできないことが分かります.理由は簡単で、CCMenuのタッチイベントはCCScrllViewのタッチイベントを食べてしまいました.CCMenuのデフォルトタッチ優先度が一番高いからです.したがって、CCScrrollViewの優先度を変更し、CCMenuよりも高くし、CCMenuのデフォルト優先度は-128であり、CCScrrollViewのデフォルト優先度は0であり、cocococococococococos 2 d-xの値が低いほど、優先度が高い.二つ目はCCMenuの優先度を変えて、CCScrrollViewより低くすればいいです.
次にどのように修正するかはまだ問題です.CCMenuとCCScrrollViewはCCLayerを継承していることを知っています.CCLayerは虚法register WithTouch Displatchがあります.この方法では下記のコードを使ってCCTouch Displatch:shredDisparer()->adTarget Delegate(this,cctur,Precitity)を使います.このLayerの優先度を制御します.CCMenuとCCScrrollViewはこの方法を複写しました.私たちは複写の方法で優先度を変更すればいいです.cococos 2 dのソースコードを変えないほうがいいです.だから私達は自分のmenuを書いてCCMenuを受け継ぐことができます.そしてregister WithTouch Displatch方法を複写します.コードは以下の通りです.
 class MyMenu : public CCMenu{
     virtual void registerWithTouchDispatcher(){
         //       1,   CCScrollView    
         CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 1, true);     }
}
 
次にMyMenuを元のCCMenuに置き換えればいいです.これは先にCCScrelViewのスライドに応答してCCMenuのクリックに応答します.
(絶えない試みの中で経験を総括して、後の人のより速い出発を助ける)