我在 pygame 中显示天空时遇到问题

问题描述 投票:0回答:1

我正在制作一款平台游戏,我正在尝试创建世界,但是 sky.png 没有出现,我尝试了其他 png,但它仍然不起作用,请帮助我作为初学者。

我插入了位置和坐标,但它没有出现,而是黑屏

这是我的代码:

import sys

import pygame

class Game:
    def __init__(self):
       pygame.init()

       pygame.display.set_caption('Shadow samurai')
       self.screen = pygame.display.set_mode((1200,800))

       self.clock = pygame.time.Clock()

       self.img = pygame.image.load('assets/sky.png') 

       self.img_pos = (160, 260)
       self.movement = [False, False]
    
    def run(self):   
         while True:
            self.screen.blit(self.img, self.img_pos)

            for event  in pygame.event.get():
                if event.type == pygame.QUIT:
                 pygame.quit()
                 sys.exit()
                if event.type == pygame.KEYDOWN:
                   if event.key == pygame.K_UP:
                      self.movement[0] = True
                   if event.key == pygame.K_DOWN:
                      self.movement[1] = True   
         pygame.display.update()
         self.clock.tick(60)

Game().run()      
python pygame blit
1个回答
0
投票

如评论中所述,可以通过将显示更新行放在循环内而不是循环外来解决此问题。为了保持代码整洁和缩进一致(正如评论中所建议的那样),您可以使用 Black 或其他自动 Python 代码格式化程序来为您完成这项工作(您甚至可以在 VS Code 中将 Black 设置为默认格式化程序,在保存时激活格式以真正使其变得简单)。应用黑色并在循环内移动显示更新(和时钟刻度)线会产生以下代码,该代码显示 sky.png 图像(假设它存在于用于加载它的目录中):

import sys

import pygame


class Game:
    def __init__(self):
        pygame.init()

        pygame.display.set_caption("Shadow samurai")
        self.screen = pygame.display.set_mode((1200, 800))

        self.clock = pygame.time.Clock()

        self.img = pygame.image.load("assets/sky.png")

        self.img_pos = (160, 260)
        self.movement = [False, False]

    def run(self):
        while True:
            self.screen.blit(self.img, self.img_pos)

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_UP:
                        self.movement[0] = True
                    if event.key == pygame.K_DOWN:
                        self.movement[1] = True

            pygame.display.update()
            self.clock.tick(60)


Game().run()
© www.soinside.com 2019 - 2024. All rights reserved.