我正在通过制作一个小项目练习我的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()
感谢您的时间。
答案 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()