之前游戏都是在2.4版本开发的。发现2.*系列后面不在维护,于是将引擎升级到了3.5。现把升级过程中遇到的函数变化列出来供有需要的同学参考
官方说明:v3.0 升级指南 · Cocos Creator
坐标:
node上掉了x,y属性,position.x和position.y是只读属性,不能直接赋值
升级前:
node.x=1, node.y=1
升级后:
node.position.x, node.position.y,
node.setPosition(1, 1)
nodeT.layer = CC.Layers.Enum.UI_2D // 新Node记得添加该属性,否则节点不会显示出来
缩放:
node的scale不能直接赋值为整数
升级前:
node.scale = 1
升级后:
node.scale = new Vec3(1, 1, 1);
颜色:
node去掉了color属性, 需要通过修改组件color属性来修改
升级前:
node.color = (new cc.Color()).fromHEX(“F5B963”)
label.outlineColor = (new cc.Color()).fromHEX(“F5B963”)
升级后:
node.getComponent(Sprite).color = (new cc.Color()).fromHEX(“F5B963”);
node.getComponent(Label).color = (new cc.Color()).fromHEX(“F5B963”);
label.node.getComponent(CC.LabelOutline).color = (new cc.Color()).fromHEX(“F5B963”)
宽度和高度:
node上去掉了opacity属性,创建node会自动增加UITransform组件
升级前:
node.width = 600
升级后:
node.getComponent(UITransform).width = 600
透明度:
node上去掉了opacity属性,创建node不会自动增加UIOpacity组件
升级前:
node.opacity = 255
升级后:
node.getComponent(UIOpacity).opacity = 255;
Tween:
x,y属性不能单独赋值,scale不能直接赋值一个整数, opacity要通过UIOpacity组件属性来修改。
以下一条写法要改为两条写法
升级前:
cc.tween(node).to(MoveTime, {x: tPosx, y: tPosy, scale: tScale, opacity: 0}).call(()=>{console.log("over")}).start();
升级后:
cc.tween(node).to(MoveTime, {position: new Vec3(tPosx, tPosy), scale: new Vec3(tScale, tScale)}).call(()=>{console.log("over")}).start();
cc.tween(node.getComponent(UIOpacity)).to(MoveTime, {opacity:0}).call(()=>{console.log("over")}).start();
zIndex:
注意:从 v3.1 开始,priority 属性已弃用,若需要调整节点树的顺序请使用 setSiblingIndex 方法。值越小越靠前
坐标:
世界坐标系的点:
以屏幕左下原点的坐标。注意世界坐标系并非单纯的依据屏幕像素坐标生成的。Canvas的宽高会根据ProjectSettings中ProjectData 中的数值与屏幕像素坐标做自适应拉伸。
举例: 如屏幕宽640,高960, 同时设置宽度固定。在屏幕像素为375812生成的世界坐标宽为640, 高为640/375812=1385.8
屏幕左下角的世界坐标为(0, 0), 屏幕正中间的世界坐标为(320, 692.9), 屏幕右上角的世界坐标为(640, 1385.8)
坐标点转化:
BNode.getComponent(UITransform).convertToNodeSpaceAR(AWorldPosition): AWorldPosition为世界坐标,将其转化为相对于BNode锚点的坐标
BNode.getComponent(UITransform).convertToWorldSpaceAR(APosition): APosition为相对于BNode锚点的坐标,将其转化为世界坐标
触点坐标:
使用event.getUILocation()获取的坐标为世界坐标
this.node.on(CC.Node.EventType.TOUCH_START, function(event:CC.EventTouch) {
let pos1 = event.getUILocation();
console.log("[TestConvert] %s", pos1.toString());
}, this);
材质:
spine动画的shader赋值:
this.aniComponent.customMaterial = this.grayMaterial;
未定义属性:
比如需要对Node增加属性noColor, 会报错 Property ‘noColor’ does not exist on type ‘Node’
解法1 使用断言强制执行:(node as any).noColor = true;
解法2 使用字符方式获取对象属性:node[“noColor”] = true;
获取精灵点击次数:
旧: itemCom.node.getNumberOfRunningActionsInTarget()
新: CC.TweenSystem.instance.ActionManager.getNumberOfRunningActionsInTarget(itemCom.node as CC.Node);