Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame多线程_Python_Multithreading_Pygame_Multiplayer - Fatal编程技术网

Python Pygame多线程

Python Pygame多线程,python,multithreading,pygame,multiplayer,Python,Multithreading,Pygame,Multiplayer,我有一个在pygame上运行的多人游戏。我在单独的线程中运行游戏/客户机/服务器,并且有一个简单的echo服务器。每当一个玩家广播一条消息,其他所有玩家都会收到它。我遇到的问题是pygame有一个while(true)循环,每10毫秒重新绘制一次屏幕。此循环导致游戏世界无法更新,因为它无法在循环之外执行任何操作。我尝试使用一个队列,以便在while循环中,它可以退出队列并处理命令,但这似乎不起作用(q.put()在队列中不放置任何内容) 感谢您的帮助!谢谢 以下是该体系结构的一个片段: clas

我有一个在pygame上运行的多人游戏。我在单独的线程中运行游戏/客户机/服务器,并且有一个简单的echo服务器。每当一个玩家广播一条消息,其他所有玩家都会收到它。我遇到的问题是pygame有一个while(true)循环,每10毫秒重新绘制一次屏幕。此循环导致游戏世界无法更新,因为它无法在循环之外执行任何操作。我尝试使用一个队列,以便在while循环中,它可以退出队列并处理命令,但这似乎不起作用(q.put()在队列中不放置任何内容)

感谢您的帮助!谢谢

以下是该体系结构的一个片段:

class Client(Thread, Observer):
    #waits for notifications from ClientSocket
    #starts the game loop
    #enqueue commands in the Game

class ClientSocket(Thread, Observable):
    #observes the socket and notifies the Client

class Server(Thread):
    #simply broadcasts commands to ClientSocket(s)

class Game(Thread):
    def __init__(self):
        self.q = queue.Queue()

    while True:
        #delay 10 ms
        #redraw
        #see if u need to process queue

我建议您仔细阅读队列文档和线程文档。您决定使用
而True:
看起来不太好。请阅读有关锁/信号量/互斥锁/事件的内容,并查看这些简单的示例,我相信您将能够创建更好的多线程体系结构。

您确实意识到,
CPython
并不是真正并发的,并且一次只运行一个线程,因为
GIL
对吗?嗯,有什么想法吗?我的聊天功能很好,但是pygame似乎破坏了一切。也许你可以发布更多的代码。您是否将主循环放在游戏类中的de run()方法中?你在客户端类中使用game.start()吗?你是对的,我在客户端中使用game.start()。在修复了所有异常错误后,我部分地让它工作了,所以我想现在这个问题已经解决了。这不是我的决定…pygame需要while True来重新绘制屏幕上的项目。我的代码工作得很好,只是当与pygame结合时,它不能正常工作。我可能需要使用事件驱动设计。。。。