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使用节点Node对象的作用,特性和使用的时机_第1张图片

比如点击面板左侧按钮需要更换背景内的东西时,可以先删除这个Node,再创建Node添加至背景图,添加需要显示的内容至Node。

如果不使用Node的话,可以先删除背景图(每次切换按钮时相同的部分),再创建背景图,添加需要显示的内容至背景图来实现相同效果。

也就是说使用Node替代了刷新整体内容的父节点(比如精灵,滑动控件等),使用Node可以不用删除重新创建不需要删除的部分。

另外当使用Node时,不要出现setContentSize(x,y),setAnchorPoint(0,0),setPosition(0,0)这种无效的废代码,能少写一行是一行

2.(必用)需要响应点击空白位置的时候, 通常用于置顶层

假设需求:背包中有道具,点击道具需要显示道具详细信息(由背景图,label标签组成),详细信息的zorder置顶,点击任意一个位置,详细信息关闭,效果图如下:

cocos2dx使用节点Node对象的作用,特性和使用的时机_第2张图片

实现这种需求有2种方法:

a.新建一个类,继承node,将详细信息的背景和标签加到这个类中

b.直接创建node,将详细信息的背景和标签加到这个node上,node尺寸需要设置为整个屏幕,层级置顶,支持触摸事件,取消事件吞噬,当收到ended事件时需要删除自身.

结论:创建Node作容器的方式是一种选项,不是必须的,我倾向于不使用Node作为容器,直接将背景作为容器,当需要做页面切换功能时,直接删除和创建背景图,能少创建一个节点是一个。Simpler is better。

 

你可能感兴趣的:(cocos2dx,Lua)