#ifndef __TOUCH_DISPATHCHER_CCTOUCH_DELEGATE_PROTOCOL_H__
#define __TOUCH_DISPATHCHER_CCTOUCH_DELEGATE_PROTOCOL_H__
#include "cocoa/CCObject.h"
#include "ccConfig.h"
NS_CC_BEGIN
class CCTouch;
class CCEvent;
class CCSet;
class CCTouchDispatcher;
class CC_DLL CCTouchDelegate //触摸事件委托,就是系统捕捉到触摸事件后交由它或者它的子类处理,所以我们在处理触屏事件时,必须得继承它
{
public:
CCTouchDelegate() {}
virtual ~CCTouchDelegate(){}
//单点触摸 子类重写回调
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent); return false;};
//optional(可选择的,随意的)
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);}
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);}
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);}
//多点触摸 子类重写回调 optional(可选择的,随意的)
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);}
virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);}
virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);}
virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);}
};
/**
@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(split 分解 分离)
them. You get exactly one UITouch per call.
- 2. You can *claim*(要求;声称;) a UITouch by returning YES in ccTouchBegan(声明一个触摸的开始通过在cctouchbegan返回true). Updates of claimed
touches are sent only to the delegate(s) that claimed them. So if you get a move/
ended/canceled update you're sure it's your touch. This frees you from doing a
lot of checks when doing multi-touch(多点触摸).
/
Cocos2d用CCTouchDispatcher类分发从IOS获取的触摸事件。它有两种分发方式一种是CCStandardTouchDelegate,一种是CCTargetedTouchDelegate。前者将所有的Touch信息直接传递给实现该协议的对象(CCStandardTouchDelegate),而后者则要求实现该代理的类一次只能处理一个事件,并且吃掉该事件,不再传播(CCTargetedTouchDelegate)。
-(void) addStandardDelegate:(id<CCStandardTouchDelegate>) delegate priority:(int)priority;
-(void) addTargetedDelegate:(id<CCTargetedTouchDelegate>) delegate priority:(int)priority swallowsTouches:(BOOL)swallowsTouches;
(The name TargetedTouchDelegate relates to(涉及 有关) updates "targeting" their specific
handler, without bothering(烦扰) the other handlers.)
@since v0.8
*/
class CC_DLL CCTargetedTouchDelegate : public CCTouchDelegate
{
public:
/** Return YES to claim the touch.
@since v0
*/
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);return false;};
// optional(可选择的,随意的)
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);}
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);}
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouch); CC_UNUSED_PARAM(pEvent);}
};
/** @brief
This type of delegate is the same one used by CocoaTouch. You will receive(接收) all the events (Began,Moved,Ended,Canceled).
@since v0.8
*/
class CC_DLL CCStandardTouchDelegate : public CCTouchDelegate
{
public:
// optional
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);}
virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);}
virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);}
virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent) {CC_UNUSED_PARAM(pTouches); CC_UNUSED_PARAM(pEvent);}
};
NS_CC_END
#endif