cocos2d-x 模态对话框基类
来源:互联网 发布:mac微信截图隐藏 编辑:程序博客网 时间:2024/04/28 19:36
// WCBaseLayer.h
// 原理:
// 模态对话框 能够拦截所有下层的消息
// cocos2d-x 消息处理优先级【-128,128】越小优先级越高
// 菜单kCCMenuHandlerPriority优先级 -128要想拦截所有消息(包括菜单)
// 必须将我们的模态对话框优先级<-128 但是也意味着拦截了当前模态对话框的菜单消息(-128)
// 我们需要手动将消息传给模态对话框上的按钮进行处理
// 使用:1.重载OnInitDialog将需要的控件添加到dlg上
// 2.需要响应事件的按钮使用pushMenu添加
// 3.派生类需要实现宏CREATE_FUNC(class_name)
#ifndef _WCBASELAYER_H_#define _WCBASELAYER_H_#include "cocos2d.h"class WCBaseLayer: public cocos2d::CCLayerColor{public: WCBaseLayer(); virtual ~WCBaseLayer();public: /** 初始化对话框 */ virtual bool initWithMenu(cocos2d::CCMenu *pMenu); virtual void onEnter(); virtual void onExit(); virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); virtual void ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);private: cocos2d::CCMenu *m_menu; // 模态对话框菜单 bool m_touched; // 记录菜单点击};#endif
//WCBaseLayer.cpp
#include "WcBaseLayer.h"USING_NS_CC;WCBaseLayer::WCBaseLayer(): m_menu(NULL), m_touched(false){}WCBaseLayer::~WCBaseLayer(){}bool WCBaseLayer::initWithMenu(cocos2d::CCMenu *pMenu){ if(!CCLayerColor::initWithColor(ccc4(0, 0, 0, 125))) { return false; } m_menu = pMenu; return true;}void WCBaseLayer::onEnter(){ CCLayerColor::onEnter(); // 屏蔽所有priority比自己大的消息 CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority - 1, true);}void WCBaseLayer::onExit(){ CCLayerColor::onExit(); CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);}bool WCBaseLayer::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){ // 因为拦截了所有消息(包括按钮) 所以需要将消息手动传给模态对话框上的按钮 if (m_menu) { m_touched = m_menu->ccTouchBegan(pTouch, pEvent); } return true;}void WCBaseLayer::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){ if (m_touched) { if (m_menu) { m_menu->ccTouchMoved(pTouch, pEvent); } }}void WCBaseLayer::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){ if (m_touched) { if (m_menu) { m_menu->ccTouchEnded(pTouch, pEvent); } m_touched = false; }}void WCBaseLayer::ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){ if (m_touched) { if (m_menu) { m_menu->ccTouchEnded(pTouch, pEvent); } m_touched = false; }}
//TestDlg.h
#ifndef _EXITDLG_H_#define _EXITDLG_H_#include "WCBaseLayer.h"class TestDlg : public WCBaseLayer{public: virtual bool init(); CREATE_FUNC(TestDlg); //菜单回调函数 void call_ok(CCObject *pSender); void call_cancel(CCObject *pSender); cocos2d::CCMenu *initMenu();public: /** 确认和退出按钮 */ void okMenuItemCallback(CCObject *obj); void cancelMenuItemCallback(CCObject *obj);};#endif
//TestDlg.cpp
#include "TestDlg.h"#include "cocos2d.h"USING_NS_CC;#define NAME_OK "sure.png"#define NAME_CANCEL "cancel.png"#define NAME_BG "chkmsg.png"bool TestDlg::init(){ if (!WCBaseLayer::initWithMenu(initMenu())) { return false; } return true;}cocos2d::CCMenu *TestDlg::initMenu(){ CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建menu背景 CCSprite *sprite = CCSprite::create(NAME_BG); sprite->setPosition(ccp(winSize.width / 2.0, winSize.height / 2.0)); this->addChild(sprite); //创建menu CCMenu *menu = CCMenu::create(); menu->setPosition(ccp(0, 0)); sprite->addChild(menu); CCSize sz = sprite->getContentSize(); //创建确定、取消按钮 CCMenuItem *okMenuItem = CCMenuItemImage::create(NAME_OK, NAME_OK); okMenuItem->setPosition(ccp(sz.width / 2.0 - okMenuItem->getContentSize().width / 1.5, okMenuItem->getContentSize().height)); okMenuItem->setTarget(this, menu_selector(TestDlg::call_ok)); menu->addChild(okMenuItem); CCMenuItem *cancelMenuItem = CCMenuItemImage::create(NAME_CANCEL, NAME_CANCEL); cancelMenuItem->setPosition(ccp(sz.width / 2.0 + okMenuItem->getContentSize().width / 1.5, okMenuItem->getContentSize().height)); cancelMenuItem->setTarget(this, menu_selector(TestDlg::call_cancel)); menu->addChild(cancelMenuItem); //创建label CCLabelTTF *lbl = CCLabelTTF::create("确定要购买?", "Arial", 45.0); lbl->setColor(ccc3(255, 0, 0)); lbl->setPosition(ccp(sz.width / 2.0, sz.height / 2.0 + 45)); sprite->addChild(lbl); return menu;}//菜单回调函数void TestDlg::call_ok(CCObject *pSender){ CCLog("ok"); this->removeFromParent();}void TestDlg::call_cancel(CCObject *pSender){ CCLog("cancel");}void TestDlg::okMenuItemCallback(CCObject *obj){ CCDirector::sharedDirector()->end();}void TestDlg::cancelMenuItemCallback(CCObject *obj){ removeFromParentAndCleanup(true);}
资源
chkmsg.png
sure.png
cancel.png
0 0
- cocos2d-x 模态对话框基类
- cocos2d-x 模态对话框的实现
- cocos2d-x中的模态对话框
- Cocos2d-x 实现模态对话框
- 【cocos2d-x】 之 模态对话框
- 【cocos2d-x】 之 模态对话框
- cocos2d-x 模态对话框的实现
- cocos2d-x 3.2 实现模态对话框
- Cocos2d-x学习(六):cocos2d-x中的模态对话框简单实现
- Cocos2d-x学习(六):cocos2d-x中的模态对话框简单实现
- Cocos2d-x学习(六):cocos2d-x中的模态对话框简单实现
- Cocos2d-x学习(六):cocos2d-x中的模态对话框简单实现
- cocos2d-x中的模态对话框简单实现
- cocos2d-x中的模态对话框简单实现
- cocos2d-x 中layer如何实现模态对话框
- cocos2d-x中的模态对话框简单实现
- cocos2d-x中的模态对话框简单实现
- cocos2d-x中的模态对话框简单实现
- Struts2 FilterDispatcher的作用
- Maven之setting.xml文件标签详解
- 自定义报表引擎ireport+java
- 数字签名和公钥加密
- General Ledger Account
- cocos2d-x 模态对话框基类
- Android基础知识总结.
- FilterDispatcher-II
- 房地产神秘顾客检测内容及指标体系
- 比特币对当今的影响
- java的正则表达式应用
- underscore学习笔记—数组函数/Arrays
- 修改RAC的IP地址
- 编码问题