Pygame не интерпретирует ввод с клавиатуры - PullRequest
0 голосов
/ 30 декабря 2018

Итак, мне нужно со временем создать игру для одного из моих классов, и я хочу использовать pygame.Поэтому я пытался следовать учебнику, а Pygame не распознает ввод с клавиатуры.Игра загружается без ошибок, но персонаж не двигается.Любая помощь?Мой код:

#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.Буду признателен за любую помощь, так как я пытаюсь узнать больше об игре dev (:

1 Ответ

0 голосов
/ 30 декабря 2018

Вы проверяете event.type на нажатия клавиш внутри оператора if, где вы проверяете

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...