Pygame KEYDOWN не распознается - PullRequest
0 голосов
/ 26 мая 2019

Я делаю игру в Python Pygame, и я сейчас настраиваю ключевой вход, и натолкнулся на часть, где я вообще не знаю, что делать.

Все переменные определены, поскольку ошибок нет, но обнаружение ключей вообще не производится, поэтому я не знаю, что делать.

Я смотрел на другие вопросы и пробовал там ответы, но еще не решил проблему

class Player(object):


    def __init__(self, x, y, velocity):
        self.x = x
        self.y = y

        self.width = 32
        self.height = 32

        self.velocity = velocity
        self.render()
        self.tick()

    def movement(self):
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                print("done")
                if event.key == pygame.K_w:
                    self.y -= self.velocity
                elif event.key == pygame.K_s:
                    self.y += self.velocity
                elif event.key == pygame.K_d:
                    self.x += self.velocity
                elif event.key == pygame.K_a:
                    self.x -= self.velocity
                elif event.key == pygame.K_ESCAPE:
                    pygame.quit()
            elif event.type == pygame.QUIT:
                pygame.quit()

    def tick(self):
        self.movement()

    def render(self):
        pygame.draw.rect(window.WINDOW, (255, 0, 0), (self.x, self.y, 
        self.width, self.height))
        pygame.display.update()

Там нет ошибок, но когда он должен распечатать "готово", это не так, я думаю, что это как-то связано с KEYDOWN в начале или до этого.

1 Ответ

0 голосов
/ 26 мая 2019

Хорошо, ваш код не завершен, но я вижу, что вы пытаетесь переместить изображение или объект вверх , вниз , влево , вправо на дисплее pygame .Я воссоздал ваш код из того, что вы дали здесь, и все, кажется, работает нормально, я не уверен насчет K_w , K_s , K_d , K_a , хотя у меня нет полного кода, и вы обеспокоены тем, что он не печатает 'done' . ПРИМЕЧАНИЕ , что я изменил их, чтобы распечатать что-то вместо фактического перемещения объекта.единственные ошибки, которые я обнаружил, связаны с вашим выходом pygame.K_ESCAPE и pygame.QUIT событиями:

Traceback (последний вызов был последним): File"main.py", строка 13, событие for в pygame.event.get (): pygame.error: видеосистема не инициализирована

Решите это с помощью pygame.quit () вместе с sys.exit () , сначала import sys поверх вашего кода.

- вот как это выглядит и распечатывается в KEYDOWN:

<code>
from pygame.locals import *
import pygame
import sys

pygame.init()

screen = pygame.display.set_mode((200,200))




while 1:
    for event in pygame.event.get():
        print(event) # logs every event happening on the pygame display

        if event.type == pygame.KEYDOWN:

            print("done")
            if event.key == pygame.K_w:
                print("self.y -= self.velocity") # not doesn't decrement it prints for testing 
            elif event.key == pygame.K_s:
                print("self.y += self.velocity") # not doesn't increment it prints for testing
            elif event.key == pygame.K_d:
                print("self.x += self.velocity") # not doesn't increment it prints for testing
            elif event.key == pygame.K_a:
                print("self.x -= self.velocity") # not doesn't decrement it prints for testing
            elif event.key == pygame.K_ESCAPE:
                pygame.quit()
                sys.exit() # add this
            elif event.type == QUIT:
                pygame.quit()
                sys.exit() # add this
</code>
...