原创作品,转载请标明: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. poj 2418 Hardwood Species (map)

    题目:http://poj.org/problem?id=2418 在poj 上交题总是有各种错误,再次感叹各个编译器. c++ AC代码,G++为超时,上代码: #include<cstdio ...

  2. IE中Ajax数据缓存的问题

    在IE中,Ajax回来的数据会有缓存的现象发生,解决方式: 1,改变URL,每次请求加一个随机数参数Math.random()或者new Date().getTime(),这样IE会认为URL不一样, ...

  3. UVa 753 (二分图最大匹配) A Plug for UNIX

    题意: 有n个插座,m个设备以及k种转化器(每种转化器视为有无限个). 转换器A->B可以将A类型的插头转化成B类型的插头,所以可以插在B类型的插座上. 求最少剩多少不匹配的设备. 分析: 抛开 ...

  4. [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 ...

  5. sockaddr和sockaddr_in的区别(转载)

    原文链接:http://kenby.iteye.com/blog/1149001 struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址. 在各种系统调 ...

  6. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  7. TortoiseGit日常使用指南

    本文在介绍了软件安装和设置后, 写了TortoiseGit 常用的一些功能, 包括:创建新库添加文件及文件夹创建分支看分支情况及修改log比较版本差异合并分支其他操作: Stash; 忽略文件本文不包 ...

  8. 静态Web开发 JavaScript

    三章 Javascript 1节javascript基本语法和注意事项 脚本,一条条的文字命令.执行时由系统的一个解释器,将其一条条的翻译成机器可识别的指令,然后执行.(不需要编译)常见的脚本:批处理 ...

  9. js基础第七天

    短信发送验证倒计时案例(常用) 关闭定时器clearInterval this 指向的是 事件的调用者 ,或者是函数的使用者. button 不可以用 disabled 不可用的意思 意思是变成灰色不 ...

  10. jdk源码调试功能

    JDK源码重新编译——支持eclipse调试JDK源码--转载 最近在研究jdk源码,发现debug时无法查看源码里的变量值. 因为sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt. ...