Can pygame events be handled in select.select input list?

一笑奈何 提交于 2019-12-13 16:34:25

问题


The documentation for python's select.select says:

Note that on Windows, it only works for sockets; on other operating systems, it also works for other file types (in particular, on Unix, it works on pipes).

My group is developing a simplistic multiplayer game using pygame and sockets. (We are not using Twisted or zeromq or any similar libraries; this being the only constraint).

Now, for the game design; we want the player to send data to the server when a key event occurs in the pygame screen. The client/player side's socket will otherwise be hooked to server and listen for changes occurring on other players' side. For this task, I'd need the pygame and socket to work parallely. I was recommended to use select module from several users on #python.

Can I do something like:

inp = [self.sock, pygame.event.get]
out = [self.server]
i, o, x = select.select( inp, out, [] )

If not, what should be the way to go?


回答1:


You could use threads for this task. Is it necessary to process server messages and pygame events in series (not concurrently)? If so, you could do this:

class SocketListener(threading.Thread):
    def __init__(self, sock, queue):
         threading.Thread.__init__(self)
         self.daemon = True
         self.socket = sock
         self.queue = queue
    def run(self):
         while True:
             msg = self.socket.recv()
             self.queue.put(msg)
class PygameHandler(threading.Thread):
    def __init__(self, queue):
         threading.Thread.__init__(self)
         self.queue = queue
         self.daemon = True
    def run(self):
         while True:
             self.queue.put(pygame.event.wait())
queue = Queue.Queue()
PygameHandler(queue).start()
SocketListener(queue).start()
while True:
    event = queue.get()
    """Process the event()"""

If not, you could process the events inside the run methods of the PygameHandler and SocketListener classes.



来源:https://stackoverflow.com/questions/21478120/can-pygame-events-be-handled-in-select-select-input-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!