Python无法在pygame中加载背景图像

时间:2020-05-15 14:58:38

标签: python pygame

我尝试使用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

2 个答案:

答案 0 :(得分:2)

对于一个游戏,您要使所有需要刷新的内容都位于主游戏循环中,您的问题是,您正在将该图像绘制到该游戏循环之外,这意味着绘制该图像之后便将其清除并且永远不会再次绘制。

要修复代码,这就是编写代码的方式:

use std::rc::Rc;
use std::cell::{RefCell, Ref};

struct Inner;

enum State {
    A(Inner),
    B,
}

struct Owner {
    state: Rc<RefCell<State>>,
}

impl Owner {
    fn a(&self) -> Option<Ref<'_, Inner>> {
        let state_ref = self.state.borrow();
        match *state_ref {
            State::B => None,
            _ => Some(Ref::map(state_ref, |state| match state {
                State::A(inner) => inner,
                _ => unreachable!(),
            })),
        }
    }
}

但是请注意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...的工作原理是游戏循环,基本上是每秒游戏循环发生多少次的度量。 确保在循环中进行任何操作时,实际上都在其中有一个位置,例如,没有加载图像,但是更新播放器在屏幕上的位置确实存在。

如果您想看看一个适用于大多数游戏引擎的良好游戏循环,本网站将为您提供帮助。但是在使用pygame时,不要看最复杂的一种,因为它不是为此而构建的。 Fix Your Timestep!

但是并非原来的问题是没有加载图像,而是加载了图像,但是您以错误的方式绘制了图像,如果您想在pygame上学习基本视频,请观看以下视频:Game Development in Python 3 With PyGame - 1 - Intro < / p>


更好的系统来简化开发

fps

答案 1 :(得分:1)

我认为您不应该在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()