【问题标题】:Python Can't load background images in pygamePython 无法在 pygame 中加载背景图片
【发布时间】:2020-05-15 23:22:12
【问题描述】:

我尝试使用 pygame.image.load() 加载 backgroud.png,但我什么也没得到。这是我的代码,请帮助我,谢谢。

import pygame

pygame.init()

# screen
screen = pygame.display.set_mode((480, 700))

# 1.load_image
bg = pygame.image.load("./images/background.png")

# 2.blit 
screen.blit(bg, (0, 0))

# 3.update
pygame.display.update()

while True:
    pass

pygame.quit()

这是我的屏幕:it get nothing

【问题讨论】:

  • 非常感谢,我找到了我的问题,而且它有效。*-*

标签: python pygame


【解决方案1】:

对于一个游戏,您制作的所有需要​​刷新的东西都需要在主游戏循环中,您的问题是,您是否在该游戏循环之外绘制图像,这意味着它被绘制一次然后被清除并且永远不会再次绘制。

要修复你的代码,你会这样写:

import pygame

pygame.init()

# screen
screen = pygame.display.set_mode((480, 700))

# 1.load_image
bg = pygame.image.load("./images/background.png")



while True:
    # 2.blit 
    screen.blit(bg, (0, 0))

    # 3.update
    pygame.display.update()

pygame.quit()

但请注意bg=pygame.image... 是如何在循环外的,这是因为如果它在循环内,它会在每次循环发生时创建该图像的新实例。

主游戏循环的工作原理是循环遍历所有函数和其他内容,然后一次又一次地循环。

游戏循环是fps 的工作方式,基本上它是衡量游戏循环每秒发生多少次。 确保每当您在循环中执行任何操作时,它实际上都有一个位置,例如加载图像没有,但更新播放器在屏幕上的位置。

如果您想了解可应用于大多数游戏引擎的优秀游戏循环,此网站将为您提供帮助。但是在使用 pygame 时不要看最复杂的那个,因为它不是为此而构建的。 Fix Your Timestep!

但是您最初的图像未加载问题并非如此,它正在加载但您以错误的方式绘制图像,如果您想要有关 pygame 的基本教程,请观看这​​些视频:Game Development in Python 3 With PyGame - 1 - Intro


一个更好的系统来简化开发

import pygame

bg = None

def load_resources():
    bg = pygame.image.load("./images/background.png")
    # all other resources

def render():
    screen.blit(bg, (0,0))

def update():
    # all logic updates for example movement of entities.

### start of game

load_resources()

while True:
    update()
    render()
    pygame.display.update()

pygame.quit()

【讨论】:

  • 您的示例将在一个疯狂的循环中使用 100% CPU - 您可能希望在其中包含一个小暂停。此外,update 可能会由于事件停止而继续无法工作 - 这因主机操作系统而异。 - 调用pygame.event.pump() 并使用pygame.display.flip() 将确保更新。
  • @jsbueno 是的,我忘记了这一点,因为我很长时间没有使用 pygame 做任何事情,所以我完全忘记了暂停系统。
【解决方案2】:

我认为你不应该在 while 循环中写 pass,因为它输出窗口将停止响应。此外,您应该在 while 循环中编写屏幕 blit 和 display.update,并且应该在路径中编写正确的图像扩展名。您还可以编写文件的完整路径,例如 ==> pygame.image.load(r"C:\Users\Desktop\back_ground.jpg")

import pygame

pygame.init()

# screen
screen = pygame.display.set_mode((480, 700))

# 1.load_image
bg = pygame.image.load("back_ground.jpg")



while True:
    # 2.blit 
    screen.blit(bg, (0, 0))

    # 3.update
    pygame.display.update()

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

【讨论】:

  • 欢迎! @大美劳
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多