原创作品,转载请标明: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. ASP.NET Identity(处理身份数据存储) 与 OWIN主机(实现katana验证授权)原理概括

    ASP.NET Identity 是4.5中引入的,支持Clamis(声明)式样登陆[即认证和授权分开模式],结合owin可以实现cookie加密等功能. 1.ASP.NET Identity架构框架 ...

  2. UVa 201 Squares

    题意: 给出这样一个图,求一共有多少个大小不同或位置不同的正方形. 分析: 这种题一看就有思路,最开始的想法就是枚举正方形的位置,需要二重循环,枚举边长一重循环,判断是否为正方形又需要一重循环,复杂度 ...

  3. hud 3336 count the string (KMP)

    这道题本来想对了,可是因为hdu对pascal语言的限制是我认为自己想错了,结果一看题解发现自己对了…… 题意:给以字符串 计算出以前i个字符为前缀的字符中 在主串中出现的次数和 如: num(aba ...

  4. I.MX6 Android 移除 Settings wifi功能

    /********************************************************************* * I.MX6 Android 移除 Settings w ...

  5. XMPP 初探

    最近刚好有机会碰到XMPP,把一些学习心得记录在这边. XMPP(Extensible Messageing and Presence Protocol)是一种IM的通讯协定,其前身为Jabber,后 ...

  6. java 垃圾回收(堆内存)、以及栈内存的释放

    一.Java的垃圾回收机制———解疑 Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间. 需要注意的是:垃圾回收回收的是无任何引用的 ...

  7. mongo客户端mongo VUE增删改查

    一.先创建一张mongo表,右击已创建的数据库test,点击addcollection.. 输入Collection Name,点击ok: 二.在创建的表中新增列与数据,右击表选择Insert doc ...

  8. centos vpn client set

    http://my.oschina.net/fishman/blog/96227 先检查服务器是否安装过 ppp, pptp, pptp-setup, 如果没有, yum -y install  安装 ...

  9. 430flash的操作

    大概印象:430的flash好像有点像arm的flash,只不过是arm的flash要比430的大很多,而且430的flash不同于E2PROOM,这一点需要值得注意 MSP430flash的基本特点 ...

  10. 【原】Storm基本概念

    Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Topologies Streams Spouts Bolts Stream groupings Reli ...