反馈一个cocos bug关于cc.Vec2

  • Creator 版本:1.8.1

  • 目标平台: 模拟器

  • 重现方式:

一个代码片段
let a = new cc.Vec2(1,0);
let b = new cc.Vec2(0,1);
cc.log(a.cross(b));
输出的是-1
但是根据叉积应该输出1

因为这个问题,我的许多物理旋转或判断都出错了

1赞

向量叉乘应该返回向量才对。官方出来补数学啦。
ay-by+bx-ax+axby-aybx

三维向量叉乘才返回向量,根据右手定则判断方向,方向垂直两个向量,大小是平行四边形面积,
二维的向量因为方向垂直两个向量,故二维向量叉积是一个值,大小是平行四边形面积
|a×b|=|axby-bxay|

点乘和叉乘?

我看了下源码,好像这叉乘全是反的

a(x1,y1), b(x2,y2)的叉乘是 x1 * y2 - y1 * x2

a(1, 0), b(0, 1)的叉乘是 1 * 1 - 0 * 0 = 1

源码里面

a.cross(b)竟然是 b与a的叉乘, 即 0 * 0 - 1 * 1 = -1

所以要得出结果为1,只能这样写 b.cross(a)

旋转也是反的,所以很多地方要90-

action的rotateTo参数是x,y,但其实是转z轴……

那这明显就是错的啊,需要叫官方改啊,误人子弟

好像panda在某一篇帖子里面解释过… 具体忘了

可能有特殊用意,没用过

求帖子链接

因为我们的旋转方向是反的……

。。。我的天。

那请您解释一下这个:

cocos哪儿都好,就是乱,文档乱,api乱,乱,乱,乱!!!

这里应该是有一个地方的坐标系搞错了。这里代码最初是我写的,不过我也不记得为什么会写反过来。估计是当时是为了同时兼容多套引擎,每套引擎的旋转方向不一致,所以做出了这个取反的决定……
目前来说,由于最早的 cocos2d-iphone 就没有统一的坐标系,所以 cocos 一直以来的旋转方向就是反的。这里取反的话,似乎会更方便计算?

这都能圆上orz,算了,反正也不常用。

可以考虑在 2.0 反过来

更新: 2.0 已经反过来了

那么也请把rotation的方向反过来,谢谢。

这个会破坏兼容性的