cocos 2 d-xシーンのレイヤ(CCLayer)とそのタッチメッセージの音

3033 ワード

ワンポイントタッチ:Targeted Touch Delegate形式
1つのレイヤがタッチメッセージを引き継ぐには、次のステップが必要です.
1.初期化フェーズでこのレイヤのプロパティをタッチメッセージを引き継ぐように設定します.たとえばinit()関数に次のように追加します.
m_bIsTouchEnabled = true;またはsetIsTouchEnabled(true);
2,リロード関数virtual void registerWithTouchDispatcher(void);
デフォルトのフォント形式はStandard Touch Delegateなので、最初から登録する必要があり、関数に次の文を追加します.
CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, INT_MIN+1, true);

この2番目のパラメータは優先度で、優先度の値が低いほど応答します(テストされていません)
3,タッチ応答関数の再ロード
タッチメッセージを引き継ぐには、次の関数を再ロードする必要があります.
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);//  virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);

ここで重視しなければならないことは、最初の関数が実現しなければならない.そうしないと、クリックすると異常が投げ出される.
 
マルチタッチ:Standard Touch Delegateフォントフォーマット(CCLayerデフォルトではこのフォントフォーマット)
このスタイルのフォーマットをサポートするには、同じように3つのステップが必要です.
1,Targeted Touch Delegate体式フォーマットの第一歩
2このノードをStandardDelegateに追加し(CCLayerの場合はこのステップを省略)、クリック可能なCCSpriteを実現する例:
onEnter関数に追加
cocos2d::CCTouchDispatcher::sharedDispatcher()->addStandardDelegate(this,0);

 
3,リロード応答関数
virtual void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesCancelled(cocos2d::CCSet*pTouches,cocos2d::CCEvent *pEvent);

ここでpTouchesはCCTouchの集合であり,以下の方法で単一接点を得ることができる.
if(!pTouches||!pTouches->count()){	return;}cocos2d::CCTouch* pTouch = (cocos2d::CCTouch*)(*(pTouches->anyObject()));

すべてのコンタクトを取得するには、このコレクションを巡回する必要があります.
for(CCSetIterator iterTouch = pTouches->begin(); iterTouch != pTouches->end(); iterTouch++){	CCTouch *pCurTouch =  (cocos2d::CCTouch*)(*iterTouch);	// do something}

4 StandardDelegateから削除:
ステップ2でカスタムCCSpriteをStandardDelegateに参加すると、このCCSpriteがクリアされたときに、このCCSpriteが削除されます.onExit関数で呼び出す
cocos2d::CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);

 
接点の地位を得る
CCTouchから接点を得ることができる地位は主に以下のいくつかの体式フォーマットがある.
1:UIView座標の取得
CCPoint ptTouch = pTouch->locationInView(pTouch->view());

ここで取得したのはデバイスのUIView座標であり,原点は左上隅,Xは右側へ,Yは下へと増加する.
2:ノード座標の取得
CCPoint ptNode = convertTouchToNodeSpace(pTouch);

ノード座標の策画はGL座標と同じであり,地点ノードの左下角を原点とし,Xは右に増加し,Yは上に増加する.
3、アンカー座標の取得
1つのノードで、すべての変換はアンカーポイントに基づいています.たとえば、平行移動、ねじれ、スケールなどです.プロシージャ関数setAnchorPoint(CCPoint var);アンカーポイントを変更します.cococos 2 d-xのノードのデフォルトのアンカーポイントは中間点であり、setArchorPoint(ccp(0.5,0.5))に等しい.ここで(0,0)は左下、(1,1)は右上を表します.
CCPoint ptNodeAR = convertTouchToNodeSpaceAR(pTouch);

このとき,座標系の原点はそのノードのアンカー位置にある.Xは右に増加し、左に減少する.Yを上へ、下へ