我的帧同步射击类游戏2D版CS终于上线了,感谢论坛各位先前的指导
我的帧同步是每100ms一个逻辑帧
客户端每6帧上传一次玩家地理位置(100ms约等于6帧)
然后服务端在收集玩家位置信息后,每100ms广播给所有玩家客户端
客户端收到服务端帧同步包以后,将玩家走路的过程分为6帧渲染
比如人物在该逻辑帧行走了6像素,那每一个渲染帧(update)走1个像素
update代码如下:
//判断人物位置是否变化
if ((this.m_targetPos.x != this.m_NowPos.x || this.m_targetPos.y != this.m_NowPos.y)) {
this.m_NowPos = this.m_targetPos;
this.cha_x = this.m_targetPos.x - this.node.x;
this.cha_y = this.m_targetPos.y - this.node.y;
this.runStep = 6;
}
//变化了则分6帧移动人物
if(this.runStep>0){
let new_x = this.node.x + this.cha_x/6;
let new_y = this.node.y + this.cha_y/6;
if ((this.cha_x > 0 && new_x > this.m_targetPos.x)
|| (this.cha_x < 0 && new_x < this.m_targetPos.x)) {
new_x = this.m_targetPos.x;
}
if ((this.cha_y > 0 && new_y > this.m_targetPos.y)
|| (this.cha_y < 0 && new_y < this.m_targetPos.y)) {
new_y = this.m_targetPos.y;
}
this.node.setPosition(new_x, new_y);
if (this.id == GameDataCenter.gameinfo.id && !GameDataCenter.moveJu) {
//摄像机移动
cc.Camera.main.node.position = new cc.Vec3(new_x, new_y, 0);
//操控杠移动
this.control.position = new cc.Vec3(new_x, new_y, 0);
}
this.runStep--;
}
现在遇到的问题是,依然有部分手机,人物在行走时卡顿
就是走一秒钟,摄像头停顿下,然后继续往前,一秒后又停顿下,然后往前(一秒只是举例,时间也不是固定的)
不是所有的手机如此,安卓旗舰机甚至大部分弱机型基本不会,iPhone机型比较常见,比如7p的ios版本越高越卡。
视频不知道怎么传,麻烦各位大大了。
另外,由于帧同步每100ms一次,上下包消息很多,粗略算了下每秒钟每个游戏房间通讯总包体为0.024M,也就是说我10m带宽的服务器理论上最大只能支持40个房间、400人同时游戏,这支撑也太小了!有大大知道怎么优化吗?