0

当我运行这个程序时,我只能将桨向左移动。我需要能够在两个方向上移动它(在 x 平面上,也就是左右),而不必重写整个程序。对不起,如果答案很简单,我只是错过了一些东西。

程序

import pygame

black = ( 0, 0, 0)
white = ( 255, 255, 255)
green = ( 0, 255, 0)
red = ( 255, 0, 0)

rect_x = 350
rect_y = 250

pad_x = 350
pad_y = 480

rect_change_x = 1
rect_change_y = 1

pad_x_c = 0

pygame.init()

size=[700,500]
screen=pygame.display.set_mode(size)

pygame.mouse.set_visible(0)

pygame.display.set_caption("Breakout Recreation WIP")

done=False

clock=pygame.time.Clock()
# -------- Main Program Loop -----------
while done==False:
    # ALL EVENT PROCESSING SHOULD GO BELOW THIS COMMENT
    for event in pygame.event.get(): # User did something
        if event.type == pygame.QUIT: # If user clicked close
            done=True # Flag that we are done so we exit this loop
        keys = pygame.key.get_pressed()  #checking pressed keys
        if keys[pygame.K_LEFT]:
            pad_x_c -= 2
        if keys[pygame.K_RIGHT]:
            pad_x_c += 2  
        else :
            pad_x_c = 0
    # ALL EVENT PROCESSING SHOULD GO ABOVE THIS COMMENT
    # ALL GAME LOGIC SHOULD GO BELOW THIS COMMENT
    # ALL GAME LOGIC SHOULD GO ABOVE THIS COMMENT
    # ALL CODE TO DRAW SHOULD GO BELOW THIS COMMENT
    # First, clear the screen to white. Don't put other drawing commands
    # above this, or they will be erased with this command.
    screen.fill(black)
    # Draw the rectangle
    pygame.draw.rect(screen,white,[rect_x,rect_y,15,15])
    pygame.draw.rect(screen,white,[pad_x,pad_y,50,10])
    # Move the rectangle starting point
    rect_x += rect_change_x
    rect_y += rect_change_y
    pad_x += pad_x_c
    # Bounce the ball if needed
    if rect_y > 480 or rect_y < 10:
        rect_change_y = rect_change_y * -1
    if rect_x > 680 or rect_x < 5:
        rect_change_x = rect_change_x * -1    
    if pad_x <= 5 :
        pad_x_c = 0
    if pad_x >= 645 :
        pad_x_c = 0
    # ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT

    pygame.display.flip()

    clock.tick(100)

pygame.quit ()
4

1 回答 1

0

在您的代码中,该else块仅在keys[pygame.K_RIGHT]为 0 时执行,而不是在两种情况均不发生时执行。

    if keys[pygame.K_LEFT]:
        pad_x_c -= 2

    if keys[pygame.K_RIGHT]:
        pad_x_c += 2  
    else:
        pad_x_c = 0

一个elif语句解决了这个问题:

    if keys[pygame.K_LEFT]:
        pad_x_c -= 2
    elif keys[pygame.K_RIGHT]:
        pad_x_c += 2  
    else:
        pad_x_c = 0
于 2013-04-07T02:31:02.683 回答