原创作品,转载请标明: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. Maven相关内容学习笔记一:基本配置和使用

    首先必须推荐的这本书<Maven实战> 许晓斌,机械工业出版社 Maven简介 其实使用Maven也有很久时间了,大部分都是别人建好了工程我使用一下,实际上并没有非常详细的使用经验,这次到 ...

  2. bzoj3237

    首先我们可以把没有询问过的边处理掉,重构图 当然这样也不影响复杂度 考虑到每次询问要删除的边很少,我们完全可以整体处理 把询问划分成两个集合,在前半部分询问未出现边我们可以整体处理掉,缩点重编号(询问 ...

  3. TRSWCM学习问题总结

    1,置标属性"id"是用来制定调用那个栏目的数据(全字配备,可以文字匹配好奇怪,好不专业.所以建议创建栏目或者站点的时候,将唯一标识设置成英文,这样才符合程序比对习惯) 2,需要添 ...

  4. js 动态计算折扣后总价格

    <script type="text/javascript"> <!---计算折扣后的总价格---> function outtotalprice(i) { ...

  5. UVa 1471 (LIS变形) Defense Lines

    题意: 给出一个序列,删掉它的一个连续子序列(该子序列可以为空),使得剩下的序列有最长的连续严格递增子序列. 分析: 这个可以看作lrj的<训练指南>P62中讲到的LIS的O(nlogn) ...

  6. WCF发布后远程访问的域名解析问题

    环境: VS2010 sp1,.net framework 4.0,windows server 2003 x64 ,iis 6.0 症状: WCF开发测试,本地调用都正常.发布后,在浏览器中访问ht ...

  7. java jvm学习笔记十(策略和保护域)

    欢迎转载请说明出处:http://blog.csdn.net/yfqnihao/article/details/8271415 前面一节,我们做了一个简单的实验,来说明什么是策略文件,在文章的最后,也 ...

  8. HDU 4777 Rabbit Kingdom 树状数组

    分析:找到每一个点的左边离他最近的不互质数,记录下标(L数组),右边一样如此(R数组),预处理 这个过程需要分解质因数O(n*sqrt(n)) 然后离线,按照区间右端点排序 然后扫一遍,对于当前拍好顺 ...

  9. Nexus 5 Android 6.0.1刷机、Root

    Nexus 5 Android 6.0.1刷机.Root 2016-01-24   一.     准备 1.      备份通讯录等数据,切记. 2.      准备adb .fastboot.网上搜 ...

  10. English Morphology

    最近参与一个小project,需要编写一个针对英文单词的stem 算法. 1. 最为常见的stem 算法 就是The English (Porter2) stemming algorithm http ...