以position举例:
设置坐标 this.node.x = 50;
获取坐标 let x = this.node.x;
要emit事件 this.node.setPosition(50,100,0);
1、为什么要这样设计
a)书写方便,易上手,尤其是tween可以恢复2.x的简洁
b)性能高
x的set函数只改变坐标的值,并标记flag
舍弃了emit,因为项目中大部分改变坐标都不需要监听事件
舍弃了每次修改坐标都要对子节点进行递归,改为:
每帧提交渲染前,才从场景根节点统一递归处理所有节点的flag
这样可以避免重复计算,即便频繁修改x,y,z的值也不会影响性能
c) 如果需要监听POSITION_CHANGED,就调用this.node.setPosition(100,50);
该函数内部也仅仅是修改x,y,z、标记flag、emit事件,其他啥也不干
d)避免重复new新的Vec3对象,内存更安全
不需要覆盖_lpos,仅仅只是改值
其他scale、rotate属性同理。
POSITION_CHANGED、SCALE_CHANGED、ROTATION_CHANGED分离,不要像现在这样& TransformBit,又没有提升任何性能,不应该让用户书写麻烦又增加学习门槛
这样设计比目前的2.x 3.x U3D都更加简洁且高性能