cocos2d-x场景中的层(CCLayer)及其触摸消息响应(转)
来源:互联网 发布:linux中竖线 命令 编辑:程序博客网 时间:2024/05/22 05:25
转自:http://home.cnblogs.com/group/topic/60740.html
之前已经建立好了一个场景,在建立场景的时候,已经将一个CCLayer加到场景的子节点上,这个节点将作为这个场景的父节点,场景中所有的内容都将以它的孩子身份出现。在移动设备上,最常处理的就是触摸消息的响应了。
单点触控:Targeted Touch Delegate方式
一个层接收触摸消息需要如下步骤:
1,在初始化阶段将此层的属性设置为接收触摸消息。例如在init()函数中添加:
m_bIsTouchEnabled = true; 或 setIsTouchEnabled(true);
2,重载函数virtual void registerWithTouchDispatcher(void);
因为默认的方式为Standard Touch Delegate,因此需要重新注册,在函数中添加以下语句
1
CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(
this
, INT_MIN+1,
true
);
其中第二个参数为优先级,优先级数值越低,越先响应(未测试)
3,重载触摸响应函数
接收触摸消息需要重载以下函数
1
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默认采纳这种方式)
支持这种方式同样需要三个步骤:
1,同Targeted Touch Delegate方式第一步
2,将此节点添加到StandardDelegate(对于CCLayer可以省略此步),以实现一个可以点击的CCSprite为例:
在onEnter函数中添加
1
cocos2d::CCTouchDispatcher::sharedDispatcher()->addStandardDelegate(
this
,0);
3,重载响应函数
1
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的集合,可以通过以下方法来获取单一触点
1
if
(!pTouches||!pTouches->count()){
return
;}cocos2d::CCTouch* pTouch = (cocos2d::CCTouch*)(*(pTouches->anyObject()));
获取全部触点需要遍历这个集合
1
for
(CCSetIterator iterTouch = pTouches->begin(); iterTouch != pTouches->end(); iterTouch++){ CCTouch *pCurTouch = (cocos2d::CCTouch*)(*iterTouch);
// do something}
4,从StandardDelegate移除:
如果第二步将自定义的CCSprite加入到StandardDelegate,那么在此CCSprite被清除时,移除此CCSprite。在onExit函数中调用
1
cocos2d::CCTouchDispatcher::sharedDispatcher()->removeDelegate(
this
);
获取触点位置
从CCTouch中可以获取到触点的位置主要有以下几种方式
1:获取UIView坐标
1
CCPoint ptTouch = pTouch->locationInView(pTouch->view());
这里获取的是设备的UIView坐标,原点在左上角,X向右侧递增,Y向下递增。
2:获取节点坐标
1
CCPoint ptNode = convertTouchToNodeSpace(pTouch);
节点坐标的计算同GL坐标,它以所在节点的左下角为原点,X向右递增,Y向上递增
3,获取锚点坐标
一个节点,所有的变换都是基于锚点,比如平移,旋转,缩放等。可以通过函数setAnchorPoint(CCPoint var);来改变锚点。cocos2d-x里节点默认的锚点是中心点,即等同于setArchorPoint(ccp(0.5, 0.5));其中(0,0)代表左下角,(1,1)代表右上角。
1
CCPoint ptNodeAR = convertTouchToNodeSpaceAR(pTouch);
这时,坐标系的原点在该节点的锚点位置。X向右递增,向左递减;Y向上递增,向下递减
原文链接:http://blog.csdn.net/lwuit/article/details/7870414
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应(转)
- cocos2d-x总结 场景中的层(CCLayer)及其触摸消息响应
- cocos2d-x 1场景中的层(CCLayer)及其触摸消息响应
- cocos2d-x总结(三)场景中的层(CCLayer)及其触摸消息响应
- cocos2d-x 场景中的层(CCLayer)及其触摸消息响
- cocos2d-x中 场景中的层触摸消息应用
- cocos2d-x学习之层的触摸消息响应
- cocos2d-x学习之层的触摸消息响应
- cocos2d-x 触摸消息响应
- cocos2d-x的CCLayer触摸事件
- Cocos2d-x ccSprite的触摸消息响应 - ccsx教程
- 【爱上cocos2d-x之六】层CCLayer
- cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate
- cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate
- cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate
- 使用AD Gallery制作强大的相册画廊
- 对android中回调的理解
- Dock界面开发
- android wifi 如何用代码设置代理
- Windows下ORACLE 10g安装与操作图解
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应(转)
- VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
- STM8 块操作
- MonetDB中文资料
- 【Cocos2d-x游戏引擎开发笔记(6)】触屏事件与多媒体 (转)
- Oracle执行计划详解
- 常见MFC UI界面库
- ListView实现自动滚动
- 三星首届全球开发者大会举行 发布5款工具包