为精灵添加触摸事件
这可能是游戏中最普通的场景了:点击某个精灵,触发此精灵的一系列动作。比如:精灵是一块石头,触摸石头后,让石头从A点移动到B点。
由于精灵(CCSprite)类没有点击、触摸事件,所以要用其他的方法为精灵添加触摸事件。
首先在场景的头文件中声明触摸所需的方法,主要包括ccTouchEnded、ccTouchBegan、registerWithTouchDispatcher。
如代码:
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); void registerWithTouchDispatcher(); |
然后在CPP文件中实现这3个方法:
//声明全局石头精灵类 CCSprite* stone; ///注册触摸代理支持 ///其中第二个参数为触摸的响应等级 值越小 响应等级越高 void HelloWorld::registerWithTouchDispatcher() { CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate( this ,-120, true ); } //判断是否点击的范围为精灵 如果是则执行动作 void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) { CCPoint touchPoint = convertTouchToNodeSpace(pTouch); if (stone->boundingBox().containsPoint(touchPoint)) { CCMessageBox( "点击了我" , "提示信息" ); } } //返回true表示支持触摸 返回false表示忽略 //也可在此方法中判断是否要为某些其它元素适时忽略触摸事件 bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { return true ; } |
最后在HelloWorld::init()方法中加上如下代码:this->setTouchEnabled(true);
到此为止,可以实现精灵的触摸(点击)事件了,但是,我们如果在场景中存在其他的比如菜单、按钮之类的元素,会发现这些元素触摸(点击)无响应了。没错,我们只判断了当触摸范围在指定精灵上时,才触发动作。
这个时候的解决办法:
我们上边有这句代码:CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-120,true);
其中第二个参数为响应等级,数越小,等级越高,所以我们只要为其它的元素指定比-120小的整数,其它元素就会优先响应自身的触摸事件。
例如:如下代码为cocos2d-x默认的退出按钮,这里设置了按钮的TouchPriority为-127,所以此按钮的响应等级高于精灵的-120的响应等级。
CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png" , "CloseSelected.png" , this , menu_selector(CatchBirdScene::menuCloseCallback)); CC_BREAK_IF(! pCloseItem); CCSize size = CCDirector::sharedDirector()->getWinSize(); // Place the menu item bottom-right conner. pCloseItem->setPosition(ccp(size.width - 20, 20)); // Create a menu with the "close" menu item, it's an auto release object. CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); pMenu->setTouchPriority(-127); pMenu->setPosition(CCPointZero); CC_BREAK_IF(! pMenu); // Add the menu to HelloWorld layer as a child layer. this ->addChild(pMenu, 1); |
到这里,基本可以实现一个场景的触摸响应了。
人生没有回头路,珍惜当下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)