blitting图像pygame的麻烦

时间:2014-01-18 16:30:43

标签: python pygame

我正在通过制作一个小项目练习我的pygame技能。在它中,它会将背景图像blit到屏幕上。之后,它将使用一个名为士兵的列表,如果列表中的项目是1,它将打印一个士兵,如果它是0,它将跳过一个空格。然而,当我运行代码时,它会使背景闪烁,然后是精灵,然后是精灵消失。我希望我的精灵在for循环结束后留在屏幕上。这是for循环部分:

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

    screen.blit(background_img, (0,0))

    for i in soldiers:
        if i == 1:
            screen.blit(sprite_img,(x,y))
            x = x + 50
            time.sleep(0.5)
            pygame.display.update()

        elif i == 0:
            x = x + 50
            time.sleep(0.5)
            pygame.display.update()

    pygame.display.update()

这是我的所有代码:

import sys, pygame, time
from pygame.locals import *

pygame.init()

soldiers = [0,1,1,1,1,0,0,1,1,0]
x = 0
y = 50

background_img = pygame.image.load("/home/myname/Desktop/Army Project/images/background.png")
sprite_img = pygame.image.load("/home/myname/Desktop/Army Project/images/sprite.png")

size = background_img.get_size()
rect = background_img.get_rect()

screen = pygame.display.set_mode(size)
pygame.display.set_caption("Army Men")

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

    screen.blit(background_img, (0,0))

    for i in soldiers:
        if i == 1:
            screen.blit(sprite_img,(x,y))
            x = x + 50
            time.sleep(0.5)
            pygame.display.update()

        elif i == 0:
            x = x + 50
            time.sleep(0.5)
            pygame.display.update()

    pygame.display.update()

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

首先,pygame.display.update()在for循环中是多余的。你只需要每帧调用一次,在你的情况下它将是两次。

其次,不要在pygame中使用time.sleep()。这基本上冻结了你的游戏。所以你不能做任何事情。如果您想要某种延迟,请使用计时器。

第三,此行在if else构造x = x + 50中出现两次。你可以把它移到if else之外。

最后,我认为你的问题是由于没有重置变量x引起的。所以他们仍然会搞砸,但在屏幕之外。

修复后的代码:

import sys, pygame, time
from pygame.locals import *

pygame.init()

soldiers = [0,1,1,1,1,0,0,1,1,0]
x = 0
y = 50

background_img = pygame.image.load("/home/myname/Desktop/Army Project/images/background.png")
sprite_img = pygame.image.load("/home/myname/Desktop/Army Project/images/sprite.png")

size = background_img.get_size()
rect = background_img.get_rect()

screen = pygame.display.set_mode(size)
pygame.display.set_caption("Army Men")

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

    screen.blit(background_img, (0,0))

    x = 0    
    for i in soldiers:
        if i == 1:
            screen.blit(sprite_img,(x,y))
        x = x + 50

    pygame.display.update()