Obraz wyświetla się tylko po kliknięciu X zamykanego program

0

Jadę pierwszy program z poradnikiem po dłuższych przygotowaniach lecz wgl nie wiem co jest źle w moim kodzie. Byłbym wdzięczny jagby ktoś mi pomógł.

import pygame

pygame.init()
window = pygame.display.set_mode((1280, 720))

class Player:
    def __init__(self):
        self.x_cord = 0
        self.y_cord = 0
        self.width = 0
        self.height = 0
        self.image = pygame.image.load("rowr.png")


    def tick(self, keys):
        if keys[pygame.K_w]:
            self.y_cord -= 2
        if keys[pygame.K_a]:
            self.x_cord -= 2
        if keys[pygame.K_s]:
            self.y_cord += 2
        if keys[pygame.K_d]:
            self.x_cord += 2

    def draw(self):
        window.blit(self.image, (self.x_cord, self.y_cord))

def main():
    run = True
    player = Player()
    while run:
        pygame.time.Clock().tick(60)  # powtórzenia pętli
        for event in pygame.event.get():
            if event.type == pygame.QUIT:  # Jak zamknę okno
                run = False
    keys = pygame.key.get_pressed()

    player.tick(keys)

    window.fill((24, 164, 240))
    player.draw()
    pygame.display.update()


if __name__ == "__main__":
    main()
3

Bo cały wątek jest blokowany przez Twojego whilea, i dopiero po wyjściu z while'a odpala się .draw().

Program powinien działać tak ze pobiera klawisz, sprawdza, updateuje stan, i rysuje, powtórz.

Żeby to naprawić przenieś kod pygame.key.get_pressed(), player.tick(), window.fill() i pozostałe do pętli while.

I może powinienem powiedzieć, takie użycie klas (jak do tego Player) jest raczej średnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1