为什么我的游戏循环处理输入这么慢?

0 投票
1 回答
856 浏览
提问于 2025-04-17 13:17

我现在正在用Python和PyGame模块制作一个游戏。我有两个类,一个是游戏类,另一个是汽车类。游戏类里有一个游戏循环的方法,这个方法是用来循环调用不同的方法,其中一个就是汽车类里的事件处理方法。当我运行程序时,一切加载得很好。但是,当我尝试移动对象时,键盘输入的反应很慢,而且当我疯狂按移动键时,有些输入根本没有被识别。

我这样构建游戏循环,是不是有什么根本性的问题呢?

游戏循环的方法如下:

def game_loop(self):                                                                       

    running = True
    self.test_car = car()

    while running:

        pygame.display.set_caption("Project G")
        self.event_handler()
        self.screen.blit(self.background, (0,0))
        self.test_car.event_handler()
        self.test_car.update()
        pygame.display.flip()

这是汽车类:

class car(game):

    def __init__(self):

        super(car, self).__init__()
        self.init_x_pos = 100
        self.init_y_pos = 100
        self.x_speed = 0
        self.y_speed = 0
        self.load_img = load()
        self.car_img = pygame.image.load(self.load_img.car_img)

    def event_handler(self):

        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

            if event.type == KEYDOWN:
                if event.key == K_DOWN:
                    self.y_speed += 1
                    print "DOWN"
                elif event.key == K_UP:
                    self.y_speed -= 1
                    print "UP"
                elif event.key == K_RIGHT:
                    self.x_speed += 1
                    print "RIGHT"
                elif event.key == K_LEFT:
                    self.x_speed -= 1
                    print "LEFT"

    def update(self):

        self.screen.blit(self.car_img, (self.init_x_pos + self.x_speed, self.init_y_pos + self.y_speed))             

1 个回答

1

你最好只用一个循环来调用 pygame.event.get()。因为当你按下键的时候,代码的不同部分可能会处理这个事件。如果一个部分忽略了某些事件,而另一个部分没有,那么当第一个部分接收到这个事件时,它会被忽略;而当第二个部分接收到这个事件时,它就会正常处理。

撰写回答