赞
踩
cocos creater当一个节点设置到另一个节点下面 时,在世界中的坐标会变化,而Unity中重新SetParent,世界坐标不会变化。
我们可以先将坐标转换到世界坐标,然后设置了父节点后,再将世界坐标转成局部坐标。
- private getWorldPos():cc.Vec2{
- return this.node.convertToWorldSpaceAR(cc.Vec2.ZERO);
- }
- private setWorldPos(pos:cc.Vec2){
- this.node.position = this.node.parent.convertToNodeSpaceAR(pos);
- }
具体使用:下面例子是在拖动时,将节点设置到Canvas下,然后放手后再添加到相应的子节点下面。
- const {ccclass, property} = cc._decorator;
-
- @ccclass
- export default class DragItem extends cc.Component {
- _isTouched:boolean = false;
- _parentNode:cc.Node = null;
-
- // onLoad () {
- // }
-
- start () {
- this.node.on("touchstart", this.onTouchStart , this);
- this.node.on("touchmove", this.onTouchMove , this);
- this.node.on("touchend", this.onTouchEnd , this);
- this.node.on("touchcancel", this.onTouchEnd , this);
-
- this._parentNode = this.node.parent;
- }
-
- private onTouchStart(evt:cc.Event.EventTouch){
- this._isTouched = true;
- let pos = this.getWorldPos();
- let canvas = cc.find("/Canvas");
- this.node.setParent(canvas);
- this.setWorldPos(pos);
- }
- private onTouchMove(evt:cc.Event.EventTouch){
- if(this._isTouched){
- this.node.setPosition(this.node.x + evt.getDeltaX(),this.node.y + evt.getDeltaY());
- }
- }
- private onTouchEnd(evt:TouchEvent){
- this._isTouched = false;
- let pos = this.getWorldPos();
- this.node.setParent(this._parentNode);
- this.setWorldPos(pos);
- }
-
- private getWorldPos():cc.Vec2{
- return this.node.convertToWorldSpaceAR(cc.Vec2.ZERO);
- }
- private setWorldPos(pos:cc.Vec2){
- this.node.position = this.node.parent.convertToNodeSpaceAR(pos);
- }
- // update (dt) {}
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。