【问题标题】:Collisions in Authoritative Server for Socket IO game套接字IO游戏的权威服务器中的碰撞
【发布时间】:2019-01-05 02:32:17
【问题描述】:

我正在尝试使用 Phaser 和 NodeJS/Socket.io 制作一个 io 游戏。我意识到为了防止作弊,我需要建立一个运行游戏的权威服务器。

在尝试构建服务器时,我不确定如何处理冲突。现在我的想法是将画布分成瓷砖并检查每个瓷砖是否有碰撞,但每次更新似乎仍然需要做很多工作。另一方面,我可以遍历所有攻击精灵并寻找与特定图块的重叠,然后检查这些图块中的精灵。恐怕这太慢了,但我可能错了。有没有人有更好的想法?

有没有人对服务器端物理引擎有任何建议,这样我就不必计算碰撞和运动了?

【问题讨论】:

  • 关于服务器端物理引擎建议的问题的最后一部分在这里是题外话。来自帮助中心:要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。.

标签: node.js socket.io collision-detection game-physics phaser-framework


【解决方案1】:

好主意。做到这一点的最好方法是使用一种称为二进制空间分区的方法,将你的世界分成块,然后只检查这些块内的对象碰撞。例如,如果您在世界的一侧有一个对象,则无需检查该对象与您世界另一侧的另一个对象之间的碰撞。

如果您以前没有这样做过,您可能不想编写自己的物理引擎,因为可用的选项太多了。甚至 Bullet3D 也有一个称为 Ammojs 的网络端口。 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 的速度运行它,有时您也可能希望在客户端上运行它,尤其是当客户端在服务器的渲染之间进行更新时。您可能必须编写一些预测或插值代码,以使动画看起来不会太乱。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多