Cocos2d-x之Touch事件处理机制
http://www.cppblog.com/Tongy0/archive/2013/03/10/198325.aspx
一、两种机制的四种不同的事件
两者的区别: 事件分发的顺序: 默认情况下所有 如需更改事件: class MyLayer: public cocos2d:CCLayer { public: virtual void registerWithTouchDispatcher(void); // addStandardDelegate() 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); // addTargetedDelegate() 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); } void MyLayer::registerWithTouchDispatcher(void) { // 委托,优先级 CCTouchDispatcher::sharedDispatcher()->addStandardDelegate(this, kCCMenuTouchPriority); // 委托,优先级,是否继续处理 CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, kCCMenuTouchPriority, true); // 2.0版本以后 CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, kCCMenuHandlerPriority); CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority, true); } 二、 如果实现回调函数?利用 void MyLayer::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) { // 单点 CCTouch *pTouch = (CCTouch*)(pTouches->anyObject()); // 所有点 for(CCSetIterator iterTouch = pTouches->begin(); iterTouch != pTouches->end(); iterTouch++) { CCTouch *pCurTouch = (CCTouch*)(*iterTouch); } // 获取点在视图中的坐标(左上角为原点) CCPoint touchLocation = pTouch->getLocationInView(); // 把点的坐标转换成OpenGL坐标(左下角为原点) touchLocation = CCDirector::sharedDirector()->convertToGL(touchLocation); // 把OpenGL的坐标转换成CCLayer的坐标 CCPoint local = convertToNodeSpace(touchLocation) // 大小为100x100,坐标为(0,0)的矩形 CCRect * rect = CCRectMake(0, 0, 100, 100); // 判断该坐标是否在rect矩形内 bool flag = rect.containsPoint(local) if(flag) { // 回调 } else { // 不执行 } } http://blog.sina.com.cn/s/blog_6c97abf10102v6hs.html
移动时代,手机很重要的一部分就是可以人机交互,玩家通过手指在屏幕上移动点击与游戏进行互动,传达信息。相比PC上鼠标的输入,这种触控能带给用户更真实的体验,所以触摸事件也是游戏中不可缺少的部分,并且随着手机硬件的不断提升,现在市场上大部分手机屏幕也支持多点触摸。本节视频将介绍在引擎中如何响应单点和多点触摸事件。 ////////////////////22222222221111 class MyScene : public CCLayer
}; } void MyScene::onExit() bool MyScene:: ccTouchBegan(CCTouch *pTouch,CCEvent*event)
void MyScene::ccTouchMoved(CCTouch *pTouch,CCEvent*event)
//////////////多点触控 virtual void ccTouchesBegan(CCSet *pTouches,CCEvent *event); // void MyScene::ccTouchesBegan(CCSet *pTouches,CCEvent*event)//得到每个触摸点
} ////////////// void MyScene::ccTouchesBegan(CCSet *pTouches,CCEvent*event)//得到每个触摸点 CCTouch *touch =(CCTouch*)pTouches->anyObject(); } void MyScene::ccTouchesMoved(CCSet *pTouches,CCEvent *event) } void MyScene::ccTouchesEnded(CCSet *pTouches,CCEvent *event) } //////////////333333333333333 void MyScene::ccTouchesBegan(CCSet *pTouches,CCEvent*event)//得到每个触摸点 } //CCTouch *touch =(CCTouch*)pTouches->anyObject(); //CCPoint pos =touch->getStartLocation(); //CCSprite *sp =CCSprite::create("icon.png"); //sp->setPosition(pos); //addChild(sp); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |