Pygame没有解释键盘输入

时间:2018-12-30 13:19:41

标签: python python-2.7 pygame

所以我最终需要为我的一个班级创建一个游戏,并且我想使用pygame。因此,我尝试按照教程进行操作,而pygame无法识别键盘输入。游戏加载没有错误,但是m角色没有动。有什么帮助吗? 我的代码:

#Import
import pygame
from pygame.locals import*

#initialization
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))


#keys
keys = [False, False, False, False]
playerpos=[100,100]

#images
player = pygame.image.load("resources/images/dude.png")
grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")

#loop
while 1:
    #clear screen
    screen.fill(0)
     #screen elements
    for x in range(width/grass.get_width()+1):
     for y in range(height/grass.get_height()+1):
             screen.blit(grass,(x*100,y*100))
    screen.blit(castle,(0,30))
    screen.blit(castle,(0,135))
    screen.blit(castle,(0,240))
    screen.blit(castle,(0,345))
    screen.blit(player,playerpos)
    #update screen
    pygame.display.flip()
    #loop events
    for event in pygame.event.get():
        #check if event is the X button
        if event.type==pygame.QUIT:
            #key_input
            if event.type == pygame.KEYDOWN:
                if event.key==K_w:
                    keys[0]=True
                elif event.key==K_a:
                    keys[1]=True
                elif event.key==K_s:
                    keys[2]=True
                elif event.key==K_d:
                    keys[3]=True
            if event.type == pygame.KEYUP:
                if event.key==pygame.K_w:
                    keys[0]=False
                elif event.key==pygame.K_a:
                    keys[1]=False
                elif event.key==pygame.K_s:
                    keys[2]=False
                elif event.key==pygame.K_d:
                    keys[3]=False
            #if it quits
            pygame.quit()
            exit(0)
    #9-Move player
    if keys[0]:
        playerpos[1]-=5
    elif keys[2]:
        playerpos[1]+=5
    if keys[1]:
        playerpos[0]-=5
    elif keys[3]:
         playerpos[0]+=5

同样,当我按wasd时,加载的字符不会移动。当我尝试进一步了解游戏开发者(:

1 个答案:

答案 0 :(得分:1)

您正在检查的if。语句中是否有event.type的按键输入

if event.type == pygame.QUIT

意思是,您的程序仅在尝试退出程序后才检查按键。

将所有if语句移至用于检查关键操作的位置,将其移到左侧的一个标签中,该标签应会起作用。

但是,退出正下方时,您将不得不移动要执行的代码

if event.type == pygame.QUIT

像这样:

if event.type==pygame.QUIT:
    #if it quits
    pygame.quit()
    exit(0)
#key_input
elif event.type == pygame.KEYDOWN:
    if event.key==K_w:
        keys[0]=True
    elif event.key==K_a:
        keys[1]=True
    elif event.key==K_s:
        keys[2]=True
    elif event.key==K_d:
        keys[3]=True
elif event.type == pygame.KEYUP:
    if event.key==pygame.K_w:
        keys[0]=False
    elif event.key==pygame.K_a:
        keys[1]=False
    elif event.key==pygame.K_s:
        keys[2]=False
    elif event.key==pygame.K_d:
        keys[3]=False

为了提高性能,请使用elif语句检查event.type而不是if语句,因为event.type不能是pygame.QUIT,pygame.KEYDOWN和pygame.KEYUP。