2012-12-07 550 views
0

我在启动程序时无法看到图像。我有一个名为“游戏”和“mygame.py”的文件夹,里面有一个“background.png”文件。我曾尝试使用PATH“/game/background.png”而不是“background.png”,但它似乎不起作用。有任何想法吗?使用pygame.image.load无法看到图像()

我的代码:

import pygame , sys 

pygame.init() 

#screen start 
def screen(): 
    screen = [1024,768] 
    screen = pygame.display.set_mode(screen,0,32) 
    pygame.display.set_caption("Testing Caption") 
    background = pygame.image.load("background.png") 
    screen.blit(background, (0,0)) 


    while True: 
     screen.blit(background, (0,0)) 
     #keyboard commands 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 


screen() 

谢谢。

回答

1

据我所知,您可以通过以下两种方式之一完成这项工作。

您可以使用绝对路径的文件,如:

"C:\path_to_game_folder\game\background.png" 

,或者你可以使用相对路径。要做到这一点下面的代码添加到您的程序:

import os 
dir = os.path.dirname(__file__) 
backgroundFile = os.path.join(dir, "background.png") 

和改变:

pygame.image.load("background.png") 

pygame.image.load(backgroundFile) 

我建议使用尽可能它使代码的可移植性以及相对路径因为它更容易维护和分发。

2

你缺少翻盖/更新调用:

clock = pygame.time.Clock() 

while True: 

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

    screen.blit(background, (0,0)) 

    pygame.display.flip() 

    clock.tick(40) # keep program running at given FPS 

每块传输的内部缓冲区时,你需要调用翻转或每帧更新一次,更新实时画面。

+0

我代替我与你的代码的同时段,我对下一行屏幕(),然后screen.flip()。但我仍然看不到这张照片。我必须将我的程序左右拖动,然后只有那个图片出现在屏幕左上角的0,0坐标上。这是正常的吗? :/再次感谢您的事先帮助。 –

+0

嗨,请记住'flip()'必须出现在'screen()'之后的循环中。另外,也许你需要添加一个时钟,否则你的程序总是处于100%cpu。我编辑了包含时钟的答案。 – pmoleri

0

我明白了!使用pygame它的重要使用“pygame.display.update()while True:内screen.flip不能与pygame一起刷新或更新屏幕。感谢早些时候回复的用户。

全码:

import pygame , sys 

pygame.init() 

#screen start 
def screen(): 
    width , height = 1280,768 
    screen = pygame.display.set_mode((width,height)) 
    pygame.display.set_caption("Testing Caption") 
    background = pygame.image.load("background.jpg") 
    screen.blit(background, (0,0)) 

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

     screen.blit(background, (0,0)) 
     pygame.display.update() 


screen() 
+0

这是我的错误。该帖子应该是'pygame.display.flip()'而不是'screen.flip()'。我纠正了我的帖子,以备将来参考。 – pmoleri