我用cocos creator 3.6.2创建了一个空的2D项目,然后在Canvas节点下增加了一个单色精灵节点,在这个单色精灵节点上挂载了一个脚本。脚本的内容就是,我在start函数里给这个节点监听了一个触摸开始和触摸移动的事件,初次触摸的时候,我记录下了触摸的鼠标位置和节点的初始位置,然后在移动的时候,用新的鼠标位置减去开始时的鼠标位置,就得到了一个x轴和y轴的偏移量,节点的初始位置加上这个偏移量,理论上就会是节点移动后的位置,可是,可是,节点偏移会越来越大。。。。。
start() {
let x1, y1, x2, y2;
this.node.on(Node.EventType.TOUCH_START, e => {
let pos = e.getLocation();
x1 = pos.x;
y1 = pos.y;
x2 = this.node.position.x;
y2 = this.node.position.y;
});
this.node.on(Node.EventType.TOUCH_MOVE, e => {
let pos = e.getLocation();
this.node.setPosition(x2 + (pos.x - x1), y2 + (pos.y - y1), 0);
});
}
然后我又尝试了论坛上说的使用getUILocation函数然后使用convertToNodeSpaceAR函数转换坐标后去设置节点位置,这个就更神奇了,节点在移动过程中来回跳动。。。。
start() {
this.node.on(Node.EventType.TOUCH_MOVE, e => {
let pos = e.getUILocation();
this.node.setPosition(this.getComponent(UITransform).convertToNodeSpaceAR(v3(pos.x, pos.y, 0)));
});
}
各位大神,到底应该怎么做?????
