我目前正在尝试使用Pygame创建游戏Breakout的简单版本。问题是我想让我的蝙蝠在屏幕上移动,为此我需要处理事件和事实,当你按下右/左箭头时,蝙蝠立即向右/向左移动。但是我的代码不起作用;只要我按下按键,蝙蝠的长度就会增加而不是简单地移动。我已经查看了代码和示例,但我仍然输了。
这是我的代码:
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()
答案 0 :(得分:0)
当你在屏幕上显示某些东西时,它会留在那里。发生的事情是你在不同位置蝙蝠击球,看起来蝙蝠的宽度增加了。简单的解决方法是在绘制球棒之前清除屏幕。
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
。