先看表现
场景为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));
手按下去那一下,会反
我也遇到这个问题 你怎么解决的
做个角度调整就可以了
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;
}
}
这个是不是缺点啊