在luacluster中使用物理引擎

本文探讨了在游戏服务器框架luacluster中使用物理引擎的可能性和挑战。通过将Bullet物理引擎封装到DLL供LUA调用,解决多线程安全性问题。作者建议根据碰撞类型采用不同的模拟方法,如使用多段贝塞尔曲线替代物理引擎进行动态物品轨迹模拟,以提高服务器效率。此外,提出了将物理量转化为贝塞尔曲线和计算两个贝塞尔曲线最小距离的算法需求,为luacluster实现更高效的游戏场景同步提供思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知luacluster是第一个实现万人同屏的游戏服务器框架。然后就有无数人来问我为啥呀?思路呀?架构呀?雀实程序员现在都不看代码的呀!可我发了哪么多技术文章也都没人看!你敢信?哎~可是你们不看我也得发呀。真怕哪天我老死了,游戏服务器这门手艺怕是就失传了呀!哎,做技术不容易,关注得兄弟给点个赞吧!

https://github.com/surparallel/luacluster​github.com/surparallel/luacluster

话说过来能不能在服务器使用物理引擎呢?使用物理引擎是没得问题的。把Bullet封装到DLL给LUA调用就可以。Bullet是多线程不安全的,所以在每个线程(luacluster中的docker)里创建一个物理引擎实体。在某个需要计算物理的场景时。可以把所有相关的物品放入物理引擎并计算想要的结果。在多线程或分布式状态下不能只创建一个物理引擎。因为很明显这个物理引擎会成为分布式下位置同步的瓶颈。但创建多个物理引擎就不能实时同步数据。因为也会导致性能瓶颈。这样物理引擎实际就变成每个服务器对象的一个计算工具。

在应用场景下。例如NPC发射了炮弹。哪么这个炮弹可以放到物理引擎里计算每帧的轨迹。然后在每帧把轨迹同步给AOI内的可见对象。如果炮弹在空中被拦截,对就是爱国者干的事情。哪么就要重新计算碰撞的轨迹。直到炮弹到达指定落点爆炸。

这里问题来了,如果每个物理引擎计算轨迹并在每帧同步位置。哪么相当于一个帧同步的消息广播源。这个帧同步的消息广播源。一直在服务器内引发消息动荡!!在《luacluster总体架构》中我说过要消灭纯粹的帧同步。因为任何帧同步的方式都非常低效。帧同步相当于玩家从A移动到B点。然后每帧都发起广播说A移动了0.1米。即使高频的枪战游戏。大部分时间里玩家的操作都是按秒计算的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值