使用cc.moveTo后节点的x/y会变成浮点数

var action1 = cc.moveTo(0.1, cc.v2(20, 110));
var action2 = cc.moveTo(0.5 , cc.v2(180, 110));
var action3 = cc.moveTo(0.5 , cc.v2(180, 20));
var callFunc = cc.callFunc(function () {
var myX = moveCard.node.x;
var myY = moveCard.node.y;
},moveCard);
moveCard.node.runAction(cc.sequence(action1,action2,action3,callFunc));

如上这段代码
现在发现在回调里面检查,会发现moveCard这个节点的X或者Y概率性的变得成为长度很长的浮点数,例如X=180.999999999995,y = 19.9999999990
重复出现的概率很大,不知道什么原因
@panda 大神帮忙看看,还是我使用 cc.moveTo的姿势不正确

不行就在动画结束回调一个函数,把输出的小数取整

关键是这个无线接近于正确的正整数值,所以没有办法取整,例如要移动到20,但是可能会变成19.9999995或者20.0000002

CCC版本是2.0.10,忘记补充了

Math.round四舍五入取整https://www.w3school.com.cn/jsref/jsref_round.asp

js 计算精度的问题

const a = 1.2;
const b = 1.1;
console.log(a-b); // 0.09999999999999987

要么避免小数点的计算,要么在计算完成之后取整

精度问题
只要差值小于 1.192092896e-7 就可以判断相等了
cocos有宏 cc.macro.FLT_EPSILON

moveTo 里也有用到这个, 所以有可能会出现不精确的小数

开源项目遇到这类简单疑问直接去翻源码比较快

1赞

大佬。膜拜,。我去看看源码