我正在尝试使用Phaser和NodeJS/Socket.io来制作一个io游戏。我意识到为了防止作弊,我需要做一个运行游戏的权威服务器。
在尝试构建服务器时,我不确定如何处理冲突。现在我的想法是将画布分成块,并检查每个块的碰撞,但这似乎仍然是每次更新的大量工作。另一方面,我可以遍历所有的攻击精灵,寻找与特定磁贴的重叠,然后检查这些磁贴中的精灵。我担心这太慢了,但我可能错了。有没有更好的主意?
有没有人对服务器端的物理引擎有什么建议,这样我就不用计算碰撞和移动了?
发布于 2018-07-28 08:55:41
不错的想法。要做到这一点,最好的方法是使用一种称为二进制空间分区的方法,在这种方法中,您将世界分割成块,然后仅在这些块中检查对象的碰撞。例如,如果您的世界的一侧有一个对象,则不需要在不同的块中检查该对象与世界另一端的另一个对象之间的碰撞。
如果你以前没有这样做过,你可能不想写你自己的物理引擎,因为有这么多可用的选项。即使是Bullet3D也有一个叫做Ammojs的web端口。Iirc有一个可以与node一起工作的版本,但是你必须做一些多线程的工作,或者替换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,有时你可能也想在客户端运行它,特别是当客户端在从服务器渲染之间进行更新时。您可能需要编写一些预测或插值代码,这样动画才不会看起来非常简陋。
希望这能帮上忙。
https://stackoverflow.com/questions/51566888
复制相似问题