Pygame 的突围游戏 - 处理事件

Breakout game with Pygame - Processing events

我目前正在尝试使用 Pygame 创建游戏 Breakout 的简单版本。问题是我想让我的蝙蝠在屏幕上移动,为此我需要处理事件和事实,即当您按下 right/left 箭头时,蝙蝠会立即移动 right/left。但是我的代码不起作用;每当我按下键时,蝙蝠的长度会增加,而不是简单地移动。我已经查看了代码和示例,但我仍然迷路了。

这是我的代码:

import pygame, sys

pygame.init()

width, height = 800, 600
screen = pygame.display.set_mode([width, height])
bat_speed = 30
bat = pygame.image.load('bat.png').convert()
batrect = bat.get_rect()

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:                        
                batrect = batrect.move(-bat_speed, 0)     
                if (batrect.left < 0):                           
                    batrect.left = 0      
            if event.key == pygame.K_RIGHT:                    
                batrect = batrect.move(bat_speed, 0)
                if (batrect.right > width):                            
                    batrect.right = width

    screen.blit(bat, batrect)
    pygame.display.flip()

pygame.quit()

当你在屏幕上 blit 某些东西时,它会留在那里。发生的事情是你在不同的位置对蝙蝠进行 blit,使蝙蝠的宽度看起来增加了。简单的解决方法是在绘制蝙蝠之前清除屏幕。

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:                        
                batrect = batrect.move(-bat_speed, 0)     
                if (batrect.left < 0):                           
                    batrect.left = 0      
            elif event.key == pygame.K_RIGHT:                    
                batrect = batrect.move(bat_speed, 0)
                if (batrect.right > width):                            
                    batrect.right = width

    screen.fill((0, 0, 0))  # This will fill the screen with a black color.
    screen.blit(bat, batrect)
    pygame.display.flip()

此外,当您不想像我上面那样检查每个条件时,请使用 elif 而不是多个 if