creator,触摸旋转,不跟手问题

先看表现

场景为creator空项目初始场景,在里面添加了一个Sprite精灵,脚本绑定在精灵上

脚本如下:

creator版本: v2.0.8

求大佬指点迷津。

你不是打印了吗?
看看是不是你转化哪里出问题了

comvec 应该是起点的坐标吧?

打印的坐标就是跟表现一样的,会出现突然变大变小的问题

如果是起点的话,是不是rotation那里就不对了

应该是计算角度的问题,看起来rotation 值可能只是0-180变化

demo发下?

你要做精灵的旋转,就不要把脚本绑在精灵上
因为精灵的旋转会使触摸点的转换出现你意想不到的变化

另外 向量与Y正轴的夹角(带方向的) 可直接用于ccc中的节点旋转角度属性 不需要转 0-360

cc.Class({
extends: cc.Component,

properties: {
    line:cc.Node
},

// use this for initialization
onLoad: function () {
    this.node.on("touchstart",function(event){

    }.bind(this));
    this.node.on("touchmove",function(event){
 
        this.rotateNode(event.touch.getLocation());
    }.bind(this));
    this.node.on("touchend",function(event){

    }.bind(this));  
},

rotateNode(position){
    var worldPos = this.node.convertToWorldSpaceAR(this.line.position);
    var dis  = worldPos.sub(position);
    var angle = Math.atan2(dis.y,dis.x)/Math.PI*180;
    this.line.rotation = -angle+180
},


// called every frame
update: function (dt) {

},

});

你的起始点错误,一直没有更新,(c c .v2(0,1));

手按下去那一下,会反

我也遇到这个问题 你怎么解决的

做个角度调整就可以了

怎么调整 有具体的代码或者demo看下吗 我试了都不行

export default class XXX {
adjustAngle: number = 0;

onTouchStart(event): void {
    let pos = event.getLocation();
    pos = this.node.convertToNodeSpaceAR(pos);
    let angle = cc.misc.radiansToDegrees(cc.v2(1, 0).signAngle(pos.sub(cc.v2(this.node.position))));
    this.adjustAngle = this.node.angle - angle;
    this.node.angle = angle + this.adjustAngle;
}  

onTouchMove(event: cc.Event.EventTouch) {
    if (!this.isCanRote)
        return;
    let pos = event.getLocation();
	pos = this.node.convertToNodeSpaceAR(pos);
    let angle = cc.misc.radiansToDegrees(cc.v2(1, 0).signAngle(pos.sub(cc.v2(this.node.position)))) + this.adjustAngle;
    this.node.angle = Math.floor(angle / this.cutAngle + 0.5) * this.cutAngle;	
}

}

这个是不是缺点啊:grin: