import pygame
r_colour = (200, 100,100)
bg_colour = (0,175,200)
(width, height) = (600, 600)
screen = pygame.display.set_mode((width, height))
screen.fill(bg_colour)
pygame.draw.rect(screen, r_colour, (30, 30, 100, 100), 0)
pygame.display.flip()
running = True
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_s:
screen.fill(bg_colour)
pygame.draw.rect(screen, r_colour, (20, 30, 100, 100), 0)
pygame.display.update()
if running == True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_s:
screen.fill(bg_colour)
pygame.draw.rect(screen, r_colour, (20, 30, 100, 100), 0)
pygame.display.update()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
break
running = False
pygame.quit()
我试图让红色方块在按's'键时移动,但不确定为什么它只能移动一次然后停止。编程非常陌生,如果很长或很难阅读,对不起。
答案 0 :(得分:4)
一个典型的应用程序有1个单个应用程序循环。应用程序循环会执行以下操作:
KEYDOWY
事件在按下某个键时发生一次,但是在按下某个键时不会连续发生。
对于连续运动,您可以通过pygame.key.get_pressed()
来获取按键的状态:
keys = pygame.key.get_pressed()
例如如果按下 s 的状态,则可以通过keys[pygame.K_s]
进行评估。
为矩形的位置添加坐标(x
,y
)。按下键时,连续操作主应用程序循环中的位置。
例如
如果按下 d ,则递增x
;如果按下 a ,则递减x
。
如果按下 s ,则递增y
;如果按下 w ,则递减y
:
import pygame
r_colour = (200, 100,100)
bg_colour = (0,175,200)
(width, height) = (600, 600)
x, y = 20, 30
screen = pygame.display.set_mode((width, height))
running = True
while running:
# handle the events
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# change coordinates
keys = pygame.key.get_pressed()
if keys[pygame.K_d]:
x += 1
if keys[pygame.K_a]:
x -= 1
if keys[pygame.K_s]:
y += 1
if keys[pygame.K_w]:
y -= 1
# clear the display
screen.fill(bg_colour)
# draw the scene
pygame.draw.rect(screen, r_colour, (x, y, 100, 100), 0)
# update the display
pygame.display.update()
pygame.quit()