现在的位置: 首页 > 综合 > 正文

cclayer的触摸处理(ccTouch)

2017年02月21日 ⁄ 综合 ⁄ 共 1375字 ⁄ 字号 评论关闭

链接:http://www.cppblog.com/Tongy0/archive/2012/04/11/170884.html 

好久没有写博客了。这里记录一点关于ccLayer的触摸处理的记录,怕将来忘记。
要使用ccLayer,必要要处理它的触摸响应。否则就少了必要的交互。
关于ccLayer的触摸有两种类型。
1) 单点触摸
2) 多点触摸
下面分别总结一下:
1) 单点触摸
要使用单点触摸,必须要重写以下几个接口:
 virtual void onEnter();//必须
 virtual void onExit();//必须
 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);//可选
a) onEnter();接口。在此接口中,需要调用父类的该接口,并且最重要的,要为当前对象注册一个触摸委托(即:代理)。参考如下代码:
 CCLayer::onEnter();
 CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);
b) onExit();接口。在此接口中,需要将在onEnter()中注册的当前对象的触摸委托给移除掉。然后调用父类的onExit();。参考代码如下:
 CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);
 CCLayer::onExit();
c) ccTouchBegan();该接口,细心的人可能会发现,就它是返回bool的。它的返回值决定着,后续的ccTouchMoved();ccTouchEnded();ccTouchCancelled();是否触发。只有返回true时才触发。
关于ccTouchBegan();ccTouchMoved();ccTouchEnded();ccTouchCancelled();的作用,在此我就不多说了。看名字我想就应该能清楚。

2) 多点触摸
要使用多点触摸。则只需要实现重写如下几个接口,即可:
 virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
 virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
 virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
它们的作用我也不多说。下面简要介绍下CCSet*对象。它存储着所有的触摸信息。即:遍历它,可以处理所有的触摸点响应。其他的用法同单点触摸一样。
注意:用多点触摸时,不需要注册上面第 1) 点中的a)与b)小点的信息。(如果我没记错的话,处理了,可能会让程序蹦掉。)

抱歉!评论已关闭.