1

我有一个在 pygame 上运行的多人游戏。我在单独的线程中运行游戏/客户端/服务器,并有一个简单的回显服务器。每次玩家广播一条消息,其他所有玩家都会收到它。我遇到的问题是 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
4

1 回答 1

-3

我建议您仔细阅读队列文档http://docs.python.org/2/library/queue.html和线程文档http://docs.python.org/2/library/threading.html。您的使用决定while True:看起来不太好。请阅读 locks/semaphores/mutex/events 并查看这些简单的示例http://www.tutorialspoint.com/python/python_multithreading.htm,我相信您将能够创建更好的多线程架构。

于 2013-04-02T03:54:03.583 回答