文档章节

服务器端物理实现(二)

liyong2
 liyong2
发布于 2016/06/16 23:00
字数 650
阅读 300
收藏 1

参考: http://fabiensanglard.net/quakeSource/quakeSourcePrediction.php

http://fabiensanglard.net/quakeSource/johnc-log.aug.htm

https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Protocol_Design_and_Optimization

服务端物理的broadphase阶段处理基本有3种方案:

1:uniform grid, 统一尺寸网格

2:sweep and prune

3: dynamic aabb tree

其中sweep and prune 可以参考box2dx, 而dynamic aabb tree 参考现代版本的 box2d实现。

服务器上如果使用类似box2d的精确物理碰撞实现,例如支持多边形碰撞,消耗确实不小,略微看了box2d的多边形碰撞实现,计算量还是比较大的;

退而求其次,首先将物理世界以unity单位0.5*0.5尺寸,切割为网格,将障碍物的aabb所占用的网格标记起来,当 坦克移动的时候,和网格进行碰撞检测,只做简单的AABB碰撞检测,运算量较小,与传统的基于网格的网络游戏,相比,复杂度是高一些的,但比box2d物理引擎要简单很多。

服务器上实现了aabb 轴对齐 统一网格障碍物判定之后,客户端就可以只需要同步速度到服务器上即可,而服务器来进行位置计算,流程:

1.客户端发送当前控制速度到服务器;
2.服务器房间启动一个物理更新的Task协程处理,定期根据玩家的速度更新服务器上玩家位置,同时进行物理碰撞计算
3:服务器将玩家在服务器上的位置广播给客户端

这里我们的服务器采用固定帧率,例如100ms一次向客户端广播服务器上玩家位置;另外一方面,服务器上以固定50ms作为物理世界刷新的频率, 每50ms计算一次玩家的当前位置。

如果客户端没有移动预测,就会存在一个问题,客户端上的玩家需要等待100多ms才开始运动,因此需要引入客户端移动预测,当

1.玩家操控的时候,立即将操控的移动速度传给玩家状态机,由状态机开始运动;

2.同时将玩家操控信息发送给服务器;

3.当服务器上玩家位置广播回来时,将其转化为一个操控命令,传送给状态机,这样对于玩家客户端状态机来讲,其都是只接受一个移动速度命令,而不关心这个命令是客户端预测发送的,还是服务器广播的。

© 著作权归作者所有

liyong2

liyong2

粉丝 51
博文 196
码字总数 64732
作品 0
广州
程序员
私信 提问
openvpn2.3.4服务器部署

一、openvpn与pptp的抉择 PPTP 点对点隧道协议(pptp)是一种实现虚拟专用网络的方法。pptp使用用于封装ppp数据包的tcp及GRE隧道控制通道。 OpenVPN OpenVPN是一免费开源软件,以路由器或桥接...

nmshuishui
2014/08/24
0
0
服务器硬件监控之Check_openmanage

昨天分享了下服务器硬件监控的知识,在文章的结尾提到了check_openmanage工具。本文就主要介绍这个工具在服务器硬件监控方面的作用。 一、check_openmanage介绍 check_openmanage 是一个 Na...

aaao
2015/06/24
0
0
服务器端物理实现(三)

服务器端物理主需要考虑3个问题: unity客户端中障碍物信息的导出 服务器上物理引擎broadphase的解决方案 服务器端物理的显示渲染 unity客户端可以做一个通用的GameObject Component 导出工具...

李勇2
2016/06/16
292
0
Java Socket网络编程

Java Socket网络编程 计算机网络中,客户机与服务器之间进行通信时,客户机必须知道服务器的IP地址和端口号。IP地址是标识Internet网络中的某台计算机,而端口号则标识着在服务器上运行的某个...

AzureMonkey
2018/12/08
22
0
lvs三种模式的优缺点

一、Virtual server via NAT(VS-NAT) 优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。 缺点:...

yagujj
2015/10/01
247
0

没有更多内容

加载失败,请刷新页面

加载更多

同名依赖,多次引入导致的程序错误

表现: 本地测试正常,打包上线后报错找不到某个方法(缺少依赖),检测依赖发现,同名依赖有两个版本。 解决:删除一个,程序正常

避难所
20分钟前
3
0
在HTML中的下拉框中实现超连接

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <link rel="canonical" href="https://blog.csdn.net/weixin_34228617/article/details/86130280"/> ......

mickelfeng
25分钟前
3
0
Content7关闭防火墙命令

在外部访问CentOS中部署应用时,需要关闭防火墙。 关闭防火墙命令:systemctl stop firewalld.service 开启防火墙:systemctl start firewalld.service 关闭开机自启动:systemctl disable f...

无名氏的程序员
27分钟前
3
0
分布式存储原理:TiDB

浮躁的码农
39分钟前
6
0
CSS实现圆角边框的完美解决方案

css实现图片圆角,兼容所有浏览器: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <style type= "text/css" > /*通用样式--容器宽度值*/ .s......

前端老手
54分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部