键盘输入背景

时间:2015-04-06 17:21:44

标签: python pygame keyboard-events

我一直在使用pygame,我想要一些键盘输入帮助。我试图按下按键,背景会变红。不幸的是,它没有用。

也许是因为我没有意图或在语法上犯了错误?

import pygame
pygame.init()
white = (34,34,34)
black=(0,0,0)
red=(255,0,0)
silver=(110,108,108)
yellow=(193,206,104)
yellow2=(213,230,100)
gameDisplay = pygame.display.set_mode((800,600))
pygame.display.set_caption('Slither')

gameExit=False

lead_x = 300
lead_y = 300

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                lead_x -= 10
                print("LEFT")

            if event.key == pygame.K_RIGHT:
                lead_x +=10
                print("RIGHT")
            if event.key == pygame.K_UP:
                 lead_y -=10
                 print("UP")
            if event.key == pygame.K_DOWN:
                 lead_y +=10
                 print("DOWN")
            if event.key == pygame.K_a:
                gameDisplay.fill(red)

    gameDisplay.fill(black)
    pygame.draw.rect(gameDisplay, white,[lead_x,lead_y,30,100])
    pygame.draw.ellipse(gameDisplay, white,[-35+lead_x,-54+lead_y,75,100])
    pygame.draw.ellipse(gameDisplay, red,[-25+lead_x,-35+lead_y,20,34])
    pygame.draw.ellipse(gameDisplay, red,[10+lead_x,-35+lead_y,20,34])
    pygame.draw.rect(gameDisplay, silver,[470+lead_x,-35+lead_y,75,30])
    pygame.draw.ellipse(gameDisplay, yellow,[400+lead_x,-35+lead_y,75,30])


    pygame.display.update()

pygame.quit()
quit()

1 个答案:

答案 0 :(得分:1)

用红色填充屏幕,但是一旦for循环结束,你就会在显示更新前用黑色涂在它上面。您可以通过使用新颜色更新fill变量,并在事件循环结束后将其用作填充颜色,而不是直接在if内调用background_color

#snip
background_color = black
while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True
        if event.type == pygame.KEYDOWN:
            #snip
            if event.key == pygame.K_a:
                background_color = red

    gameDisplay.fill(background_color)
    pygame.draw.rect(gameDisplay, white,[lead_x,lead_y,30,100])
    #snip