cocos2dx|cocos2dx使用节点Node对象的作用,特性和使用的时机

为什么需要理解何时要创建一个Node这个问题?
阅读目前在做的项目的代码,有的界面会创建Node,有的不会创建.那么当你去新建一个界面时,你是创建Node还是不创建呢?有什么依据标准这个问题驱动我来研究下Node的使用方法.
Quick-cocos2dx创建Node的方式:display.newNode()
Node的作用:自身在显示上无内容,作其他子类(精灵,按钮等)的容器,实现通过控制Node容器可以整体移动,整体删除的效果。
Node创建后的初始属性:位置为(0,0)和精灵相同,锚点为 (0,0)和精灵(0.5,0.5)不同,尺寸为(0,0)和精灵不同。
Node作为一个不可见的容器尺寸是否有作用?当需要对Node进行触摸事件处理的时候,需要设置Node的大小来控制事件触发区域
Node的使用时机:
1.(可用可不用)当需要通过按钮来控制一个整体内容(比较合适的的情况是整体内容里有大量的控件)显示和切换的时候,类似"换页"效果。
cocos2dx|cocos2dx使用节点Node对象的作用,特性和使用的时机
文章图片

比如点击面板左侧按钮需要更换背景内的东西时,可以先删除这个Node,再创建Node添加至背景图,添加需要显示的内容至Node。
如果不使用Node的话,可以先删除背景图(每次切换按钮时相同的部分),再创建背景图,添加需要显示的内容至背景图来实现相同效果。
也就是说使用Node替代了刷新整体内容的父节点(比如精灵,滑动控件等),使用Node可以不用删除重新创建不需要删除的部分。
另外当使用Node时,不要出现setContentSize(x,y),setAnchorPoint(0,0),setPosition(0,0)这种无效的废代码,能少写一行是一行
2.(必用)需要响应点击空白位置的时候, 通常用于置顶层
假设需求:背包中有道具,点击道具需要显示道具详细信息(由背景图,label标签组成),详细信息的zorder置顶,点击任意一个位置,详细信息关闭,效果图如下:
cocos2dx|cocos2dx使用节点Node对象的作用,特性和使用的时机
文章图片

实现这种需求有2种方法:
a.新建一个类,继承node,将详细信息的背景和标签加到这个类中
【cocos2dx|cocos2dx使用节点Node对象的作用,特性和使用的时机】b.直接创建node,将详细信息的背景和标签加到这个node上,node尺寸需要设置为整个屏幕,层级置顶,支持触摸事件,取消事件吞噬,当收到ended事件时需要删除自身.
结论:创建Node作容器的方式是一种选项,不是必须的,我倾向于不使用Node作为容器,直接将背景作为容器,当需要做页面切换功能时,直接删除和创建背景图,能少创建一个节点是一个。Simpler is better。

    推荐阅读