本人热爱做游戏 但是职业是Web开发 所以很多游戏开发技术并不了解
我在游戏开发领域比较了解的技术就是网络同步联机 这次给大家带来我自己制作的简单物理同步实现 希望大家可以帮我优化
物理同步我认为是应该比较难的问题 我找了很多教程都是简单同步 如果涉及物理 则需要解决一系列难题 我以前接触UE4时候游戏引擎有同步解决方案 可以自动生成 服务端 通过服务端的物理模拟进行每个客户端的同步 达到物理同步.
在我使用cocos的时候发现同步这一块需要自己写 我的一个cocos同步的项目就是贪吃蛇 在自己写的途中遇到很多问题慢慢的都解决 做完之后 我在想如果物理需要同步cocos要怎么解决 我去很多论坛找了很多 但是我都实现不了(技术不允许) 比如服务端运行物理进行同步 可是我不会啊 。。。 所以有自己写的打算 JNGame就是我的物理同步的作品 JNGame并不是可以商用的框架 只是一个思路 大家如果需要商用肯定要进行大幅度调整 。
上面是我的出发点 我简单讲讲我的思路 首先物理难同步 我认为两个难点 网络延迟导致物理的出发点每个客户端不一致 设备的物理计算结果不一致 如何解决 我这里总结就是多物理导致的 每个物理都在计算自己的 在加上延迟一系列导致不同步 所以我想如果一个物体只有一个控制者控制这个物体的物理不就解决了吗 UE4的控制者通常计算服务端 也就是服务端控制世界 但是门槛太高了(/(ㄒoㄒ)/~~) 我不会 所以我JNGame用的思路是物理继承 由物理的触发者拿到这个物体的物理权限 其他服务端则同步他的物理结果
简单的假设一个足球游戏这个游戏很多人操作这个足球的物理 那谁控制呢 就是最后对它踢的那个控制…这样就可以解决了哈哈哈哈
JNGame我还没做完 这是我为了实现这个想法做的项目 看看是否可行 在我一系列调整 感觉已经可以接受了 不过还是有小问题 这些我没法解决 所以大家有解决的方案请告诉我
bug:
1.物理交接的时候丢失一部分物理效果
2.使用两个碰撞体 (为什么使用两个 因为 两个物理属性为Static触碰不会触发碰撞事件 所以用了两个)
吞吐量比较大 如果你们要用一定要把DTO对象改成protobuf生成 我这里为了方便所以除了自己实现的RPC 代码 在业务中的DTO我都是JSON序列化。
环境:
后台: Java 【框架 Spring Boot 下的 WebSokect】 没有使用Netty是因为我只是测试 我会一点Web服务器开发使用比较会Spring 大佬们需要用可以自己改
客户端:cocos creator
git:JNGame: NGame 是一个Java游戏服务器框架 实现基础功能 可以让使用者更方便的编写业务
效果视频:文件分享
我是cocos新人 希望大佬可以加我QQ:2858626794 WX:jisol_kun
本人目前做Web前端 打算过年后转游戏开发 如果可以内推我的大佬可以加我~~~~