原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12708811

场景类CCScene和布景类CCLayer都是作为一个容器来使用,这里简单地看下它们的实现:

1.场景类:CCScene

CCScene类继承于CCNode,它的实现很简单,就是基本上没添加什么内容。。。它只是作为一个容器(父节点)的抽象概念存在。对比CCNode差别有:

(1)构造函数中设置了不使用锚点定位,而是使用了坐标原点,即使设置了锚点也不起作用。

m_bIgnoreAnchorPointForPosition是CCNode的属性,用于CCScene和CCLayer。

[cpp] 
view plain
copy

 

  1. m_bIgnoreAnchorPointForPosition = true;

(2)在init中设置场景的大小。节点的初始化大小为CCSizeZero,也就是没有大小。CCScene初始化时设置了场景的大小,即窗口大小。

[cpp] 
view plain
copy

 

  1. this->setContentSize(pDirector->getWinSize());

2.布景类:CCLayer

CCLayer相对CCScene而言会比较麻烦一点,因为他不仅要作为容器使用,而且还要实现一些游戏功能,所以它继承了CCTouchDelegate,CCAccelerometerDelegate和CCKeypadDelegate,这三个类是用来处理触摸事件,重力感应事件和键盘事件的,默认初始化都是不可用,需要手动设置开启。

(1)CCLayer和CCScene的初始化差不多,也是构造函数中设置不使用锚点定位,init函数中设置了层的大小,即窗口大小。

(2)常用接口:

[cpp] 
view plain
copy

 

  1. //初始化函数,添加精灵就在这里进行
  2. virtual bool init();
  3. //分配内存,标记autoRelease
  4. static CCLayer *create(void);
  5. //层进入回调
  6. virtual void onEnter();
  7. //层退出回调
  8. virtual void onExit();
  9. //如果层进入带效果,效果完成时回调
  10. virtual void onEnterTransitionDidFinish();
  11. //触摸事件(单点和多点)
  12. virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
  13. virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
  14. virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
  15. virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
  16. virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
  17. virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
  18. virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
  19. virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);
  20. //重力感应相关
  21. virtual void didAccelerate(CCAcceleration* pAccelerationValue);
  22. void registerScriptAccelerateHandler(int nHandler);
  23. void unregisterScriptAccelerateHandler(void);
  24. //注册触摸分发,默认是addStandardDelegate
  25. virtual void registerWithTouchDispatcher(void);
  26. //设置/获取释放触摸可用
  27. virtual bool isTouchEnabled();
  28. virtual void setTouchEnabled(bool value);
  29. //设置/获取触摸模式
  30. virtual void setTouchMode(ccTouchesMode mode);
  31. virtual int getTouchMode();
  32. //设置/获取触摸优先级,默认为0
  33. virtual void setTouchPriority(int priority);
  34. virtual int getTouchPriority();
  35. //设置/获取是否接收重力感应事件
  36. virtual bool isAccelerometerEnabled();
  37. virtual void setAccelerometerEnabled(bool value);
  38. virtual void setAccelerometerInterval(double interval);
  39. //设置/获取是否接收键盘事件
  40. virtual bool isKeypadEnabled();
  41. virtual void setKeypadEnabled(bool value);
  42. //返回键和菜单键的回调,需要设置接收键盘事件
  43. virtual void keyBackClicked(void);
  44. virtual void keyMenuClicked(void);

3.颜色布景层:CCLayerRGBA,CCLayerColor和CCLayerGradient

(1)CCLayerRGBA和CCNodeRGBA差不多,也是用于设置RGB值和Blend值,同时可以传递到子节点。它的相关接口参见CCNodeRGBA。

(2)CCLayerColor只是一个单纯的可以绘制颜色的层。可以带入长宽参数,绘制一个矩形的布景层。

(3)CCLayerGradient继承于CClayerColor,是一个带有渐变效果的布景层。

4.多层布景层:CCLayerMultiplex

CCLayerMultiplex继承与CCLayer,相当于一个层容器,他可以包含多个层,但是同一时间只能显示一个CCLayer。《我叫MT》的第一个界面菜单那一块就是这么处理的。CCLayerMultiplex最重要的函数就是:

[cpp] 
view plain
copy

 

  1. //切换布景层
  2. pLayerMultiplex->switchTo(item->getTag());
  3. pLayerMultiplex->switchToAndReleaseMe(item->getTag());

两者的差别在于是否释放当前处于活动的布景层。

[置顶] 【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer的更多相关文章

  1. [置顶] 玩转Eclipse — 自动注释插件JAutodoc

    代码注释是一种良好的编程习惯.不管对于他人还是自己,注释都有助于代码的阅读和理解.手动添加注释,是一个非常费时和繁琐的工作,严重影响软件开发效率,这也是绝大多数程序员不愿添加注释的主要原因.JAuto ...

  2. Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。

      <Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...

  3. [置顶] COcos2d-X 中文API

    本文来自http://blog.csdn.net/runaying ,引用必须注明出处! COcos2d-X 中文API 温馨提醒:使用二维码扫描软件,就可以在手机上访问我的博客啦!另外大家可以访问另 ...

  4. vue 通过自定义指令实现 置顶操作;

    项目需求:要求当前项目每个页面滑到超出一屏的距离时,出现 backTop 按钮,点击则回到最顶端:俗称置顶操作: 因为涉及到的页面较多,每个页面都加肯定显得重复累赘,最终想到了 Vue 的自定义指令  ...

  5. [置顶] Web用户的身份验证及WebApi权限验证流程的设计和实现 (不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!!)

     转发 http://blog.csdn.net/besley/article/details/8516894 不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!! [ ...

  6. Win32API使用技巧 -- 置顶应用

    Win32提供了SetForegroundWindow方法可以将应用设置到前台并激活,但是在某些场景下,只调用该接口会返回0,即设置失败.比如如下场景: 当前前台应用为一个全屏的应用,非前台应用的进程 ...

  7. 在UWP中页面滑动导航栏置顶

    最近在研究掌上英雄联盟,主要是用来给自己看新闻,顺便copy个界面改一下段位装装逼,可是在我copy的时候发现这个东西 当你滑动到一定距离的时候导航栏会置顶不动,这个特性在微博和淘宝都有,我看了@ms ...

  8. WinFrom窗体始终置顶

    调用WindowsAPI使窗体始终保持置顶效果,不被其他窗体遮盖: [DllImport("user32.dll", CharSet = CharSet.Auto)] privat ...

  9. winform窗体置顶

    winform窗体置顶 金刚 winform 置顶 今天做了一个winform小工具.需要设置置顶功能. 网上找了下,发现百度真的很垃圾... 还是必应靠谱些. 找到一个可以链接. https://s ...

随机推荐

  1. 函数fsp_alloc_seg_inode_page

    分配一个新的inode page /**********************************************************************//** Allocat ...

  2. [swustoj 917] K-lucky-number

    K-lucky-number(0917) 问题描述 K-lucky-number is defined as add up the number of each bit is a multiple o ...

  3. 分布式存储Memcache替代Session方案

    PHP自带的Session实际是在服务器中为每个客户建立独立的文件存放各自的信息. 在不做处理的情况下,很容易被客户端伪造.并且由于采用文件形式,所以存在着IO 读写的瓶颈.一般当用户在线达到1000 ...

  4. 从linux启动到rootfs的挂载分析

    简单的来说,根文件系统包括虚拟根文件系统和真实根文件系统.在Kernel启动的初始阶段,首先去创建虚拟的根文件系统,接下来再去调用do_mount来加载真正的文件系统,并将根文件系统切换到真正的文件系 ...

  5. Diamond

    Diamond主要提供持久配置的发布和订阅服务,最大特点是结构简单,稳定可靠.Diamond的主要使用场景是用来进行动态数据库切换与扩容,进行一些业务系统运行时开关配置的推送.Diamond产品专注于 ...

  6. [原创]使用squish打包与混淆cocos2d-x的lua脚本

    squish是一个开源的用于打包lua脚本的小工具,它的主要功能是将多个lua文件整合成一个文件,并在此基础上做压缩和混淆等处理,混淆和压缩后的代码可以直接被执行而不需要先做解压还原等操作. 它的gi ...

  7. 线性存储结构-LinkedList

    LinkedList内部采用链表的形式构建,是一个双向链表.除了继承List外,还继承了Deque接口,可以当做堆栈结构使用. private static final class Link<E ...

  8. 【转】ExcelHelper类,用npoi读取Excel文档

    //------------------------------------------------------------------------------------- // All Right ...

  9. uva 11020 Efficient Solutions

    题意:给你n个人,有两个属性x.y,如果不存在另外一个人x2,y2满足 x2<=x,y2<y 或者 x2<x,y2<=y,那么就称这个人是有优势的,每次给你一个人得信息,问你当 ...

  10. [转载]mac下homebrew的使用

    该文转自:https://www.zybuluo.com/phper/note/87055 mac系统也是基于unix的系统,所以也继承类很多unix的特性,包括软件的编译,安装等.ubuntu下有快 ...