Socket IO游戏中权威服务器的碰撞问题

3
我正在使用Phaser和NodeJS/Socket.io尝试制作一个IO游戏。我意识到为了防止作弊,我需要创建一个运行游戏的权威服务器。
在构建服务器时,我不确定如何处理碰撞。目前我的想法是将画布分成瓷砖,并检查每个瓷砖是否发生碰撞,但这仍然需要很多工作来更新。另一方面,我可以循环遍历所有攻击精灵并查找与特定瓷砖重叠的位置,然后检查那些瓷砖中的精灵。我担心这太慢了,但我可能错了。有人有更好的想法吗?
还有,有没有推荐的服务器端物理引擎,使我不必计算碰撞和运动?

你关于服务器端物理引擎推荐的问题是不适合在这里讨论的。根据帮助中心的规定:要求我们推荐或寻找书籍、工具、软件库、教程或其他外部资源的问题,由于往往会吸引主观性答案和垃圾信息,因此在 Stack Overflow 上是不适合讨论的。相反,请描述问题以及已经采取的解决方案。 - jfriend00
1个回答

2
“好主意。据我所知,最好的方法是使用一种称为二进制空间分割的方法,将你的世界分成块,然后仅在这些块内检查对象之间的碰撞。例如,如果你在你的世界的一侧有一个物体,你就不需要在另一个块中的你世界的另一侧检查该物体和另一个物体之间的碰撞。”
“如果你以前没有做过这个,你可能不想编写自己的物理引擎,因为有很多可用的选项。即使Bullet3D也有一个称为Ammojs的Web端口。我IRC有一个适用于节点的版本,但你必须进行一些多线程工作或替换WebWorkers才能使其正常工作。”
“这里有一篇由其他人撰写的博客文章,介绍了如何使用Box2d作为物理引擎在套接字和节点游戏中运行:”

http://paal.org/blog/2012/07/06/running-box2d-on-server-with-node-js-via-socket-io/ https://www.youtube.com/watch?v=5ty6wA2wSX4

记住,即使你在一个权威服务器上以60fps运行它,最终你可能也想在客户端上运行它,特别是如果客户端在从服务器渲染之间进行更新。你可能需要编写一些预测或插值代码,以便动画看起来不会很卡顿。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接