Проблема с отображением материала в Pygame - PullRequest
0 голосов
/ 03 марта 2020

По сути, я хочу, чтобы прямоугольник двигался по экрану с помощью клавиш wasd. Окно всплывает, а затем быстро закрывается, и я не могу понять, почему. Я не могу понять, чем это отличается от моего другого изображения - отображения кода.

import pygame

pygame.init()

white = (255, 255, 255)
black = (0, 0, 0)

X = 1000
Y = 800

display_surface = pygame.display.set_mode((X, Y))

pygame.display.set_caption('Image')

def main():
    px = X/2
    py = Y/2

    while True:
        display_surface.fill(white)

        if event.key == pygame.K_w:
            py += 5
        elif event.key == pygame.K_a:
            px -= 5
        elif event.key == pygame.K_s:
            py -= 5
        elif event.key == pygame.K_d:
            px += 5

        pygame.draw.rect(display_surface, black, (px, py, 25, 25))

        for event in pygame.event.get():
            if event.type == pygame.QUIT:

                pygame.quit()
                quit()

        pygame.display.update()

1 Ответ

2 голосов
/ 03 марта 2020

Вам нужно запустить main()

. Для перемещения объекта лучше использовать pygame.key.get_pressed(). С event вам придется нажимать клавишу снова и снова или писать по-другому.

С get_pressed() вы должны использовать if, а не elif, потому что он может иметь True для много ключей одновременно.

import pygame

pygame.init()

white = (255, 255, 255)
black = (0, 0, 0)

X = 1000
Y = 800

display_surface = pygame.display.set_mode((X, Y))

pygame.display.set_caption('Image')

def main():
    px = X/2
    py = Y/2

    while True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            #elif event.type == pygame.KEYDOWN:                
            #    if event.key == pygame.K_w:
            #        py += 5

        keys = pygame.key.get_pressed()

        if keys[pygame.K_w]:
            py -= 5
        if keys[pygame.K_a]:
            px -= 5
        if keys[pygame.K_s]:
            py += 5
        if keys[pygame.K_d]:
            px += 5

        display_surface.fill(white)
        pygame.draw.rect(display_surface, black, (px, py, 25, 25))
        pygame.display.update()

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