所以我最终需要为我的一个班级创建一个游戏,并且我想使用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时,加载的字符不会移动。当我尝试进一步了解游戏开发者(:
答案 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。