cocoscreator开发双人对战类游戏 两个手机发射炮弹使用同样的角度力度重力加速度 炮弹轨迹有时不相同

cocoscreator开发对战类游戏,两个手机发射炮弹使用同样的角度,力度,重力加速度,炮弹轨迹有时不相同,自己实现了fixedupdate还是不行。

主要代码如下:
fixedUpdate: function (dt) {
console.log(“fixedUpdate—” + dt);
this._speedY += this.gravity * dt;

    this.node.x += this._speedX * dt;
    this.node.y += this._speedY * dt;
},

update: function (dt) {
    if(!this._isLaunch){
        return;
    }

    this._num_dt += dt;
    var k = Math.floor(this._num_dt / (1.0 / 50.0));

    if (k >= 1)
    {   // 保证炮弹总是有50帧/秒的速率
        for (var i = 0; i < k; i++)
        {
            this.fixedUpdate(1.0 / 50.0);
        }
        this._num_dt = this._num_dt - k * (1.0 / 50.0);
    }
},
2赞

你用到了 dt,你没保证两台机子的 dt 都是一样的

我实现了fixedupdate这个方法,应该能保证用于计算的dt是一样的,都是(1.0 / 50.0);

你的炮弹轨迹就这么算的吗?没有用到其它方法?三角函数有用到吗?

用到三角函数了,用来计算水平方向和垂直方向的运动速度,算出之后水平速度不变,垂直速度受重力影响进行变化。

关键代码如下:

var rad = angleValue / 180 * Math.PI;
var force = this.Maxforce * forcePercent / 100;

this._speedX = Math.cos(rad) * force;
this._speedY = Math.sin(rad) * force;

除了运动轨迹有所偏差外,还会存在碰撞检测穿透的情况。我用的是最新的版本1.8.2

只要有浮点数,就肯定会出现不同的情况。请了解下帧同步的模拟