Python pygame事件在延迟几秒钟后响应

Python pygame事件在延迟几秒钟后响应,python,sockets,networking,pygame,Python,Sockets,Networking,Pygame,为了克服();我改写如下: import socket, select, pygame, pygame.locals, random, json colours = [ (19, 225, 30), (41, 2, 245), (251, 240, 32), (255, 255, 255), (0, 0, 0), (255, 0, 0) ] class client: def __init__( self, host, port ):

为了克服();我改写如下:

import socket, select, pygame, pygame.locals, random, json

colours = [
    (19, 225, 30),
    (41, 2, 245),
    (251, 240, 32),
    (255, 255, 255),
    (0, 0, 0),
    (255, 0, 0)
]

class client:
    def __init__( self, host, port ):
        self.server = self.servehost, self.serveport = host, port
        self.client = self.address, self.port = "localhost", random.randrange( 8000, 9000 )
        self.connection = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
        self.connection.setblocking( 0 )
        self.connection.bind( self.client )
        self.readers = [ self.connection ]
        self.writers = []
        self.launchPygame( 600, 800, colours[2] )

    def launchPygame( self, height, width, colour ):
        self.screen = pygame.display.set_mode( (width, height) )
        self.screen.fill( colour )
        pygame.display.flip()

    def newColour( self ):
        return colours[ random.randrange(0, len(colours)) ]

    def run( self ):
        flag = True
        clock = pygame.time.Clock()
        fps = 30
        try:
            self.connection.sendto( "JOIN", self.server )
            while flag:
                clock.tick( fps )
                r, w, e = select.select( self.readers, self.writers, [], 4 )
                for f in r:
                    if f is self.connection:
                        data, addr = f.recvfrom( 32 )
                        print data

                for event in pygame.event.get():
                    if event.type in [ pygame.QUIT, pygame.locals.QUIT ]:
                        flag = False
                        break
                    elif event.type == pygame.locals.KEYDOWN:
                        if event.key == pygame.locals.K_ESCAPE:
                            flag = False
                            break
                        else:
                            new_colour = self.newColour()
                            self.screen.fill( new_colour )
                            self.connection.sendto( json.dumps(new_colour), self.server )
                        pygame.event.clear( pygame.locals.KEYDOWN )
                pygame.display.update()
        except socket.error, e:
            print e
        finally:
            self.connection.sendto( "LEAVE", self.server )

if __name__ == "__main__":
    c = client( 'localhost', 1992 )
    c.run()
只需监听传入的连接并打印数据

import select, socket, sys

class server:
    def __init__( self, host, port ):
        self.listener = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
        self.address = self.host, self.port = host, port
        self.listener.bind( self.address )
        self.reading = [ self.listener ]
        self.writing = []
        self.clients = {}

    def run( self ):
        while True:
            try:
                data, addr = self.listener.recvfrom( 32 )
                print data
            except socket.error, e:
                print e

if __name__ == "__main__":
    s = server( 'localhost', 1992 )
    s.run()


上述脚本工作正常(socket与pygame屏幕输入并行侦听),但pygame输入在一次运行中排队并处理。我希望程序在服务器上侦听响应,同时保持游戏正常运行。

没关系,我因为调用而受到延迟。我更改了以下内容:

r, w, e = select.select( self.readers, self.writers, [], 4 )

它正在按预期工作

r, w, e = select.select( self.readers, self.writers, [], 0 )