0

我可以让我的对象停止。一旦我按下 w、a、s 或 d,它就会移动但不会停止。当我按下其中一个方向时,它会移动但不会停止。当我释放钥匙时,我需要它停止。我们将不胜感激所有类型的帮助。这是我的代码:

while (running == 1):
    screen.fill(white)
    for event in pygame.event.get():
        if (event.type == pygame.QUIT):
            running = 0
        elif (event.type == pygame.KEYDOWN):
            if (event.key == pygame.K_d):
                dir = "R"
            elif (event.key == pygame.K_a):
                dir = "L"
            elif (event.key == pygame.K_s):
                dir = "D"
            elif (event.key == pygame.K_w):
                dir = "U"
            elif (event.key == pygame.K_ESCAPE): 
                sys.exit(0)
            elif (event.key == pygame.K_SPACE):
                shot=True
                xbul=xgun
                ybul=ygun
            #if key[K_SPACE]:
                #shot = True


    #OBJECT'S MOVEMENTS
    if (dir == "R" and xgun<595):
        xgun = xgun + 3
        pygame.event.wait
    elif (dir == "L" and xgun>0):
        xgun = xgun - 3
        pygame.event.wait
    elif (dir == "D" and ygun<460):
        ygun = ygun + 3
        pygame.event.wait
    elif (dir == "U" and ygun>0):
        ygun = ygun - 3

    screen.blit(gun, (xgun,ygun))
    #PROJECTILE MOTION
    #key = pygame.key.get_pressed()

    if shot == True:
        xbul = xbul + 3
        screen.blit(bullet, (xbul, ybul))

    if xbul>600:
        shot=False

    pygame.display.flip()
    time.sleep(0.01)
4

2 回答 2

6

你应该抓住pygame.KEYUP并停止当前的运动。

于 2013-01-10T19:25:45.667 回答
0

利用pygame.key.get_pressed()

那是

key = pygame.key.get_pressed()
if key[pygame.K_d]:
    dir = "R"
elif key[pygame.K_a]:
    dir = "L"
elif key[pygame.K_s]:
    dir = "D"
elif key[pygame.K_w]:
    dir = "U"
elif key[pygame.K_ESCAPE]: 
    sys.exit(0)
elif key[pygame.K_SPACE]:
    shot = True
    xbul = xgun
    ybul = ygun
else:         # If none of the keys is pressed, Stop.
    dir = 'S'
于 2013-01-11T09:23:35.443 回答