从 cocos creater物理引擎固定时间计算问题 继续讨论:
目前我们的技术方案是服务端同步物理引擎步进,以保证各个客户端逻辑帧完全同步,但现在引擎的物理引擎是用自己的时钟来推进的
engine/cocos2d/core/physics/CCPhysicsManager.js 现有代码
update: function (dt) {
var world = this._world;
if (!world || !this.enabled) return;
this.emit('before-step');
this._steping = true;
var velocityIterations = PhysicsManager.VELOCITY_ITERATIONS;
var positionIterations = PhysicsManager.POSITION_ITERATIONS;
if (this.enabledAccumulator) {
this._accumulator += dt;
var FIXED_TIME_STEP = PhysicsManager.FIXED_TIME_STEP;
var MAX_ACCUMULATOR = PhysicsManager.MAX_ACCUMULATOR;
// max accumulator time to avoid spiral of death
if (this._accumulator > MAX_ACCUMULATOR) {
this._accumulator = MAX_ACCUMULATOR;
}
while (this._accumulator > FIXED_TIME_STEP) {
world.Step(FIXED_TIME_STEP, velocityIterations, positionIterations);
this._accumulator -= FIXED_TIME_STEP;
}
}
else {
var timeStep = 1/cc.game.config['frameRate'];
world.Step(timeStep, velocityIterations, positionIterations);
}
world.DrawDebugData();
this._steping = false;
var events = this._delayEvents;
for (var i = 0, l = events.length; i < l; i++) {
var event = events[i];
event.target[event.func].apply(event.target, event.args);
}
events.length = 0;
this._syncNode();
},