我需要为 Pygame 项目做一些基本的网络。
基本上,它是一款 2D 单人游戏或合作游戏。联网只需要支持两个播放器,一个作为主机。
唯一需要发送的信息是玩家、小兵和子弹的位置。
我一直在四处阅读, Twisted 一直在出现,但我以前没有做过网络,我不确定这是否会有点矫枉过正。
那么,相对新手有没有可能在Pygame中实现联网呢?
原文由 Lightbreeze 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要为 Pygame 项目做一些基本的网络。
基本上,它是一款 2D 单人游戏或合作游戏。联网只需要支持两个播放器,一个作为主机。
唯一需要发送的信息是玩家、小兵和子弹的位置。
我一直在四处阅读, Twisted 一直在出现,但我以前没有做过网络,我不确定这是否会有点矫枉过正。
那么,相对新手有没有可能在Pygame中实现联网呢?
原文由 Lightbreeze 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答972 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
这是最近在 Reddit 上被问到的,所以我或多或少只是从那里复制我的答案。对于无法提供更多链接,我深表歉意,我有 <10 个代表,所以我一次只能发布两个。
Twisted 可能有用,但我没有太多的经验。我建议使用套接字,因为 Twisted 无论如何都会在后台使用它。如果您想了解套接字的工作原理(在 C++ 中,但概念无处不在),Beej 的指南(google it)几乎就是套接字的圣经。 Python 确实抽象出了一些复杂性,但了解后台发生的事情仍然是一个好主意。
对于特定于 Python 的套接字,您可以继续使用 howto(user745294 在上面发布了一个链接)。 这里 有一篇不错的文章,标题为“每个程序员都需要了解游戏网络”。它涉及不同类型的主要网络样式(客户端-服务器、p2p、udp 与 tcp 等)以及一些主要游戏用于其网络的背后的历史。
下面是我在 Python 2.6/Pygame 中制作网络“游戏”时所做的演示的链接。这实际上不是游戏,但您创建的每个客户端都连接到服务器并控制一个角色。您可以使用箭头键移动角色,角色将在所有连接的客户端上移动。我尝试对源代码进行注释,说明我来回发送的内容,但您可能需要了解一些有关套接字的知识才能理解它。
源代码在本文下方评论中的键盘链接中提供。您将需要在与脚本相同的目录中提供两个图像:
bg.png
是背景精灵。它应该是一个 400px 宽和 300px 高的图像(如果需要,可以在GameClient
类中更改)sprite.png
是玩家角色。它应该小于背景,以便您可以看到它四处移动。