怎么实现物品拖动的效果

convertToNodeSpace 把触摸点转换到节点局部空间,然后节点位置设到此位置,但是结果貌似不对,而且会一直颤抖。test.rar (2.7 MB)

不知道你是什么用意?

简而言之,就是把节点设置到触屏的位置。
由于触屏消息里的位置信息是相对世界坐标系的,而节点是相对本身的局部坐标系,所以要转换下。

cc.Class({
extends: cc.Component,

properties: {
    touchPt: {
        default: null,
        type: cc.Node,
        displayName: "节点"
    },
},

onLoad: function () {
    function onTouchMove(event) {
        var pt = this.convertTouchToNodeSpaceAR(event);
        this.x = pt.x;
        this.y = pt.y;
    }
    this.touchPt.on('touchmove', onTouchMove, this.touchPt);
},

});
自己以为逻辑差不多就是这样子的,但结果是:拖动过程中,节点会一直抖动,而且位置也不对。

貌似可以了,原来得用 getDeltaX、getDeltaY。
function onTouchMove(event) {
var x = event.getDeltaX();
var y = event.getDeltaY();
this.x += x;
this.y += y;
}

我说一下你原来为什么不可以。因为节点的x,y相对的是它的父坐标系,而你转换成的是相对节点自己的坐标系。你应该转换到父节点的坐标系应该就可以了。deltaX, deltaY就没有这种问题。

2赞

楼上正解

1赞