namespace cocos2d { typedef enum { ccTouchDelegateStandardBit = 1 << 0, ccTouchDelegateTargetedBit = 1 << 1, ccTouchDelegateAllBit = (ccTouchDelegateStandardBit | ccTouchDelegateTargetedBit), } ccTouchDelegateFlag; class CCTouch; class CCEvent; class CCSet; class CCTouchDispatcher; class CCTouchDelegate { public: ccTouchDelegateFlag getTouchDelegateType(void); //! call the release() in child(layer or menu) virtual void destroy(void); //! call the retain() in child (layer or menu) virtual void keep(void); virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); // optional virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent); // optional virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent); CCTouchDelegate(); void registerScriptTouchHandler(int eventType, const char* pszScriptFunctionName); bool isScriptHandlerExist(int eventType); void excuteScriptTouchHandler(int eventType, CCTouch *pTouch); void excuteScriptTouchesHandler(int eventType, CCSet *pTouches); }; /** @brief Using this type of delegate results in two benefits: - 1. You don't need to deal with CCSets, the dispatcher does the job of splitting them. You get exactly one UITouch per call. - 2. You can *claim* a UITouch by returning YES in ccTouchBegan. Updates of claimed touches are sent only to the delegate(s) that claimed them. So if you get a move/ ended/cancelled update you're sure it's your touch. This frees you from doing a lot of checks when doing multi-touch. (The name TargetedTouchDelegate relates to updates "targeting" their specific handler, without bothering the other handlers.) @since v0.8 */ class CCTargetedTouchDelegate : public CCTouchDelegate { public: CCTargetedTouchDelegate(); /** Return YES to claim the touch. @since v0 */ virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); // optional virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent); }; /** @brief This type of delegate is the same one used by CocoaTouch. You will receive all the events (Began,Moved,Ended,Cancelled). @since v0.8 */ class CCStandardTouchDelegate : public CCTouchDelegate { public: CCStandardTouchDelegate(); // optional virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent); }; }//namespace cocos2d