CocosCreator帧同步

浮点数处理

1.JavaScript中的Number(double64)遵循IEEE754标准,现代cpu都遵循IEEE_754标准,误差是稳定的。

console.log(0.1+0.2) //不同平台计算结果一样 0.30000000000000004 

2.Math.PI和三角函数在不同平台上计算结果不同(iOS误差明显),因此不能直接使用这些数学库,要使用查表法。

3.使用确定性随机数。

function syncRand(seed) {
    return function() {
        seed = (seed * 9301 + 49297) % 233280;
        return seed / 233280.0;
    };
}

let rand = syncRand(18);
console.log(rand());
console.log(rand());
console.log(rand());

4.截断小数位数(不是必须的)。

5.要注意日志输出结果精度不高。

console.log(0.1 + 0.2); //0.30000000000000004
console.log(3.142) //网页输出3.142 原生平台输出3.1419999999999999

//C++代码
#include <iostream>

int main(){
    double a = 0.1;
    double b = 0.2;
    double c = 0.1 + 0.2;

     std::cout << c;

     if (c == 0.30000000000000004) {
         std::cout << "Hello World!\n";
     }
     return 0;
}
//输出:0.3Hello World!

6.游戏过程中作弊检测。
玩家每隔一段时间把所有角色的关键数据加密为MD5上传服务器,服务器进行比对。如果是所有人上传上来的MD5都一样说明所有人的游戏结果都是同步的,如果有人修改了血量那么就会造成游戏不同步自己的MD5和其他人的不一样,服务器可以强行纠正它或者踢掉它。

文章不错,你都不请我喝杯茶,就是说你呀!