对 pygame 中的运动感到困惑

Confused with movement in pygame

我正在尝试在 pygame 中制作一个小游戏。玩家是左边的红色矩形(如果你 运行 它),我只是想让火箭变量快速向左移动。每当我 运行 程序时,如果我按任意键或移动鼠标,它就会移动火箭。

代码如下:

import pygame,sys,random
pygame.init()
pygame.key.set_repeat(1, 100)
size=width,height=1280,830


screen = pygame.display.set_mode(size)
black = [0, 0, 0]
white = [255, 255, 255]
sky_blue = ((0,255,255))
red = ((255,0,0))
font = pygame.font.SysFont("Arial",14)
rocket=pygame.Rect(1200,350,150,50)
player= pygame.Rect(250,350,250,50)
hull=100
player_speed=100
while True:
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
    elif event.type==pygame.KEYDOWN:
        if event.key == pygame.K_RIGHT:
            player_speed=player_speed+100
        if event.key == pygame.K_LEFT:
            player_speed=player_speed-100
        if event.key == pygame.K_UP:
            player.top=player.top-50
        if event.key == pygame.K_DOWN:
            player.top=player.top+50

    if player_speed>1000:
        player_speed=1000
    if player_speed<100:
        player_speed=100

    if player.top<0:
        player.top=0
    elif player.bottom>height:
        player.bottom=height
    
    #rocket code
    if player.colliderect(rocket):
        hull=hull-100
    if player_speed>99:
        rocket.right=rocket.right-5
    

screen.fill(sky_blue)
pygame.draw.rect(screen,red,player)
pygame.draw.rect(screen,red,rocket)
renderedText = font.render("Speed: "+str(player_speed),1,black)
screen.blit(renderedText, (width/2+50,10))
if hull<1:
    renderedText = font.render("GAME OVER",1,black)
    screen.blit(renderedText, (width/2+500,500))    
pygame.display.flip()
pygame.time.wait(10)

你的缩进不正确导致逻辑错误。

if player_speed>1000:

...

rocket.right=rocket.right-5

这些行之间的代码需要缩进一个。否则此代码只有在有事件时才为 运行。因为如果没有事件,for 循环将跳过其中任何代码的执行。