Cocos2d-X中实现自己定义菜单处理事件
实现 自己 定义 菜单 cocos2d
2023-09-27 14:25:17 时间
当用户点击再松开后才会响应菜单事件,而在游戏中有些游戏须要玩家点击后就处理事件。如玩坦克大战的时候,玩家是点击一下就发射子弹。并是点击松手后发射子弹,在Cocos2d-X中没有这样的消息。以下就通过自己定义的方式实现当用户点击后就调用处理函数
程序:当用户点击后处理消息松开手后处理结束
首先自己定义一个MyMenu类用于处理点击事件
/* 1)注冊定时器函数,在定时器处理函数中,调用m_pSelectItem->active() */ class MyMenu : public CCMenu { public: CREATE_FUNC(MyMenu); //当手按下的时候 bool ccTouchBegan(CCTouch* touch, CCEvent* ev) { bool bRet = CCMenu::ccTouchBegan(touch, ev); if (bRet) { // 注冊定时器函数 scheduleUpdate(); return true; } return false; } void ccTouchEnded(CCTouch* touch, CCEvent* ev) { //定时器停止计时 unscheduleAllSelectors(); } //每次帧循环都会被调用 //dt上一次帧循环到这次帧循环所花的时间 void update(float dt) { if (this->m_pSelectedItem && m_eState == kCCMenuStateTrackingTouch) { this->m_pSelectedItem->activate(); } } };
在Menu.h中加入以下的代码(代码中包括了自己定义的MyMenu类)
#ifndef __Menu_H__ #define __Menu_H__ #include "cocos2d.h" USING_NS_CC; class Menu : public CCLayer { public: virtual bool init(); static CCScene* scene(); //响应菜单事件 void menuHandler(CCObject*); CREATE_FUNC(Menu); }; /* 1)注冊定时器函数,在定时器处理函数中,调用m_pSelectItem->active() */ class MyMenu : public CCMenu { public: CREATE_FUNC(MyMenu); //当手按下的时候 bool ccTouchBegan(CCTouch* touch, CCEvent* ev) { bool bRet = CCMenu::ccTouchBegan(touch, ev); if (bRet) { // 注冊定时器函数 scheduleUpdate(); return true; } return false; } void ccTouchEnded(CCTouch* touch, CCEvent* ev) { //定时器停止计时 unscheduleAllSelectors(); } //每次帧循环都会被调用 //dt上一次帧循环到这次帧循环所花的时间 void update(float dt) { if (this->m_pSelectedItem && m_eState == kCCMenuStateTrackingTouch) { this->m_pSelectedItem->activate(); } } }; #endif // Menu
在Menu.cpp中加入以下的代码
#include "Menu.h" CCScene* Menu::scene() { CCScene *scene = CCScene::create(); Menu *layer = Menu::create(); scene->addChild(layer); return scene; } bool Menu::init() { //初始化父类层 CCLayer::init(); //得到窗体的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建菜单项 CCMenuItem* item = CCMenuItemFont::create("Click Me", this, menu_selector(Menu::menuHandler)); //使用自己定义的MyMenu创建菜单 MyMenu* menu = MyMenu::create(); //加入菜单 addChild(menu); //加入菜单项 menu->addChild(item); return true; } //响应菜单事件 void Menu::menuHandler(CCObject*) { CCLog("I am Clicked"); }
运行结果:
当点中“Click Me”不松手,会一直打印“ Iam Clicked”直到松手
相关文章
- Java 实现 淘宝秒杀 聚划算 自己主动提醒 源代码
- 机器如果能够实现自己建模,应该是下一次人工智能的飞跃点
- 用了一天的时间,linux下expect实现ssh自己主动登录server记,歧视下网上各种抄来抄去残段子
- 利用反射技术实现POJO的数据库操作
- 多目标优化非支配关系实现
- 自己实现sizeof+大小端测试
- createContext 和 useContext 结合使用实现方法共享(React Hook跨组件透传上下文与性能优化)
- PID控制器开发笔记之二:积分分离PID控制器的实现
- Android实现一个自己定义相机的界面
- 翻翻git之---自己定义邮件发送buttonSendButton(流程分析,实现思路能够学习下)
- 自己定义ViewGroup实现仿淘宝的商品详情页
- Android 自己定义ViewGroup 实战篇 -> 实现FlowLayout
- js没有replaceAll方法,自己来实现replaceAll方法
- 原生js源码之JavaScript的call方法,自己来实现
- 自己实现java中Iterator(迭代器功能)
- [分享]在ubuntu9.10下实现开机自动登录并运行自己的图形程序