创建一个弹出层

  1. /* 功能
  2. * 1. 弹出层的基类, 比下层拥有更高的优先级, 用于屏蔽下层,及本层外触摸事件
  3. * 2. 提供一个容量,及相应方法,用于装纳需要处理事件的对象 CCTouchDelegate*对象,
  4. */
  5. #ifndef __MythLeague__UpperLayer__
  6. #define __MythLeague__UpperLayer__
  7. #include "Global/Constants.h"
  8. #include "CommonLayer/TouchLogicLayer.h"
  9. class UpperLayer : public TouchLogicLayer{
  10. public:
  11. UpperLayer();
  12. virtual ~UpperLayer();
  13. bool init();
  14. void onEnter();
  15. void onExit();
  16. void registerWithTouchDispatcher();
  17. void appendToTouchDispatch(cocos2d::CCTouchDelegate* p_touchableObject);
  18. #pragma mark 触摸相关
  19. //开始
  20. bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
  21. //移动
  22. void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
  23. //结束
  24. void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
  25. //点击home键或其它方式引起的取消
  26. void ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
  27. public:
  28. //cocos2d::CCArray* m_touchDispatchTable;
  29. std::vector<cocos2d::CCTouchDelegate*> m_touchDispatchTable;
  30. int m_iIndex;//m_iIndex-1为实际索引
  31. };
  32. #endif /* defined(__MythLeague__UpperLayer__) */
  33. //
  34. //
  35. #include "UpperLayer.h"
  36. using namespace cocos2d;
  37. UpperLayer::UpperLayer(){
  38. }
  39. UpperLayer::~UpperLayer(){
  40. }
  41. bool UpperLayer::init(){
  42. bool l_bResult = true;
  43. do {
  44. if(!TouchLogicLayer::init()){
  45. l_bResult = false;
  46. }
  47. } while (0);
  48. return l_bResult;
  49. }
  50. void UpperLayer::onEnter(){
  51. TouchLogicLayer::onEnter();
  52. }
  53. void UpperLayer::onExit(){
  54. TouchLogicLayer::onExit();
  55. }
  56. void UpperLayer::registerWithTouchDispatcher()
  57. {
  58. cocos2d::CCDirector* pDirector = cocos2d::CCDirector::sharedDirector();
  59. pDirector->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority-1, true);
  60. }
  61. void UpperLayer::appendToTouchDispatch(CCTouchDelegate* p_touchableObject){
  62. //断言,p_touchableLayer是CCLayer*类型, (可以是继承)
  63. CCAssert(dynamic_cast<CCTouchDelegate*>(p_touchableObject) != NULL, "p_touchableLayer must be a layer");
  64. m_touchDispatchTable.push_back(p_touchableObject);
  65. }
  66. #pragma mark 触摸相关
  67. //开始
  68. bool UpperLayer::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
  69. //super
  70. TouchLogicLayer::ccTouchBegan(pTouch, pEvent);
  71. m_iIndex = Common_Empty;
  72. CCTouchDelegate* l_touchAble = NULL;
  73. int l_iIndex = 0;
  74. for (; l_iIndex<m_touchDispatchTable.size(); l_iIndex++) {
  75. l_touchAble = m_touchDispatchTable[l_iIndex];
  76. if (l_touchAble && l_touchAble->ccTouchBegan(pTouch, pEvent))
  77. {
  78. m_iIndex = l_iIndex;
  79. break;
  80. }
  81. }
  82. return true;
  83. }
  84. //移动
  85. void UpperLayer::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
  86. //super
  87. TouchLogicLayer::ccTouchMoved(pTouch, pEvent);
  88. if (m_iIndex >= 0) {
  89. CCTouchDelegate* l_touchAble = m_touchDispatchTable[m_iIndex];
  90. l_touchAble->ccTouchMoved(pTouch, pEvent);
  91. }
  92. }
  93. //结束
  94. void UpperLayer::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
  95. //super
  96. TouchLogicLayer::ccTouchEnded(pTouch, pEvent);
  97. if (m_iIndex >= 0) {
  98. CCTouchDelegate* l_touchAbleLayer = m_touchDispatchTable[m_iIndex];
  99. l_touchAbleLayer->ccTouchEnded(pTouch, pEvent);
  100. }
  101. }
  102. //点击home键或其它方式引起的取消
  103. void UpperLayer::ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
  104. }
  105. 所有的弹出层,只要继承一下这个就可以,他的优点是事件分发由自己来控制,比较灵活

来自为知笔记(Wiz)

时间: 2024-08-16 03:17:34

创建一个弹出层的相关文章

创建一个弹出DIV窗口

创建一个弹出DIV窗口 摘自:   http://www.cnblogs.com/TivonStone/archive/2012/03/20/2407919.html 创建一个弹出DIV窗口可能是现在网站/网页制作中最常碰到的问题之一.传统的 JavaScript弹窗已经不适合目前网站的设计理念了,理由有二:首先,不友好——生硬的弹出对话框且伴随着“哐”的一声对用户体验是个很大的挑战: 其次,兼容性不够强——有相当多的浏览器屏蔽了这种JS的Alert()方法.于是,一个良好用户体验的网站需要一种

Ajax加载外部页面的一个弹出层效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Ajax加载外部页面的一个弹出层效果<

【Cocos2d js系列】创建一个弹出框

网上搜了半天资料,发现没一个说的简单明了的,我写一个吧: 首先最重要的一点:可以在一个Layer中Add另外一个Layer,并且Layer对象也是可以设置缩放比率的. 也就是说:你在GameOver的函数中可以: var godLayer=new GameOverDialogLayer(); this.addChild(godLayer);//这个this是当前的主Layer 这就一个霸气到爆炸的对话框出来了,当然对话框出来以后我们还要遮盖底层的用户输入. 先说到这里,我去码一个代码出来了接着发

一个弹出层,相对浏览器居中,可以随浏览器缩放大小,有最大值和最小值(当然不支持ie6)

下边是代码 .div1{ position: fixed; z-index: 9999; background: #ccc; width: 100%; height: 100%; left: 0; top: 0} .div2{ position: absolute; min-width: 320px; max-width: 650px; height: 500px; width: 50%; margin: auto; left: 0; right: 0; top: 0; bottom: 0; b

实现一个简单的弹出层

弹出层的实现方式是让一个块层遮挡住最底下的层,在最顶上显示相应的内容,因为最底下的块级和最上面的块级属于一个页面,他们之间也可以共享一些数据(实现一些特定的操作) 下面是简单的一个实现的过程 首先我们定义一个基本的页面结构 <div id="show"> //最底下的层 <input type="button" value="测试" id="test"/> </div> <div id

制作一个有模态的弹出层

参考慕课网课程<分享:阿当大话西游之WEB组件> 定制不同的皮肤可通过对元素添加或减少class类来实现. 首先,模态是指如下图部分的灰色背景部分:(灰色部分不可点击) 然后,要记住,模态要加在当前页面的上面,以及当前操作框(通常是一个弹出层)的下面 所谓上面,下面是指: 如果模态(通常是一个div)的定位是fixed(固定定位)的,那么它将不占据文档空间, 所以,将其height和width设置为100%,另外,设置left:0;top:0.即为铺满整个屏幕. 然后,在html中,处于此di

JavaScript学习总结(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

JavaScript学习总结(一)--延迟对象.跨域.模板引擎.弹出层.AJAX示例 目录 一.AJAX示例 1.1.优点 1.2.缺点 1.3.jQuery AJAX示例 二.延迟对象(Deferred) 2.1.回调函数 2.2.deferred.done 三.跨域 3.1.什么是跨域 3.2.JSONP跨域 3.3.jQuery使用JSONP跨域 3.4.跨域资源共享(CORS) 3.5.小结 四.弹出层 五.模板引擎 5.1.Hello World 5.2.方法 5.3.与AJAX结合应

jquery 简单弹出层

预定义html代码:没有 所有代码通过js生成和移除. 预定义css /* 基本弹出层样式 */ .my-popup-overlay { width:100%; height:auto; /* width height is defined by javascript */ position: absolute; top:0; left: 0; z-index: 1000; background-color: #000; opacity: 0.2; *filter:alpha(opacity=2

jquery 简单弹出层(转)

预定义html代码:没有 所有代码通过js生成和移除. 预定义css /* 基本弹出层样式 */ .my-popup-overlay { width:100%; height:auto; /* width height is defined by javascript */ position: absolute; top:0; left: 0; z-index: 1000; background-color: #000; opacity: 0.2; *filter:alpha(opacity=2