0

私は現在、PyGameモジュールを使用してPythonでゲームを作成しています。ゲームクラスと車クラスの2つのクラスがあります。ゲームクラスにはゲームループメソッドがあり、これをさまざまなメソッドでループさせました。1つはcarクラスのイベントメソッドです。プログラムを実行すると、すべてが正常に読み込まれます。ただし、オブジェクトを移動しようとすると、キーボード入力の処理が遅くなり、移動キーをスパムすると、一部の入力がまったく認識されません。

ゲームループの構成方法に根本的な問題はありますか?

ゲームループの方法は次のとおりです。

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))             
4

1 に答える 1

1

おそらく、ループ呼び出しは 1 つだけである必要がありますpygame.event.get()。キーを押したときにコードのどの部分が実行されているかに応じて、イベントはどちらかにルーティングされる可能性があります。一方が特定のイベントを破棄し、もう一方が破棄しない場合、最初のイベントがイベントを取得するたびに無視されますが、2 番目のイベントがイベントを取得すると、通常どおり処理されます。

于 2013-01-20T23:28:49.653 に答える