【发布时间】:2025-12-27 04:40:07
【问题描述】:
我对 python 和一般编程比较陌生,想知道如何将多人游戏功能添加到我用 pygame 制作的单人游戏中。我已经制作了一个接受多个连接的功能性服务器和一个客户端,以制作一个可用于发送消息的系统。我尝试制作一个运行游戏并将各种游戏数据(例如x位置)发送到服务器的客户端,同时还从其他客户端接收此类数据,但无济于事。 这是我的消息传递客户端代码:
import socket
import threading
class Client:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def sendMSG(self):
while True:
self.sock.send(bytes(input(''), 'utf-8'))
def __init__(self):
port = 12345
self.sock.connect(('127.0.0.1', port))
iThread = threading.Thread(target=self.sendMSG)
iThread.daemon = True
iThread.start()
while True:
data = self.sock.recv(1024)
if not data:
break
print(str(data, 'utf-8'))
client = Client()
它完美地发挥了它的作用,但我无法将它与我的单人游戏代码结合起来。我尝试更改 sendMSG 函数的功能并将其视为游戏循环。当按下方向键并且值发生更改但尝试接收该数据时遇到问题时,我能够到达客户端发送位置数据的地步。我使用了线程,但由于某种原因,它不能同时运行游戏和接收数据。也许我的思维过程是错误的?如果您能帮我弄清楚如何将我的游戏循环添加到客户端,我将不胜感激。谢谢。
【问题讨论】:
-
您错误地使用了套接字。 TCP 是一种流协议。你必须在它之上构建一些协议,至少是一个简单的基于行的协议。
-
@Daniel 那么我应该选择 UDP 吗?我不能制作一个在游戏运行时不断将游戏数据流式传输到所有客户端的系统吗?如果不使用套接字,我将如何实现我的目标?我一直在寻找制作多人游戏的方法,但大多数谷歌搜索结果都显示了简单的聊天应用程序或基于文本的游戏,我尝试将其逻辑转移到我的案例中但没有成功。感谢您的回答。
-
你试过python-socketio吗?我的理解是,它可以帮助你从这些挑战中抽象出来。编辑:作为 aiohttp 中间件也来自线程问题
标签: python sockets multiplayer