当我在PyGame屏幕上移动图像时,如果碰巧碰到另一个图像,那么下面的图像就会隐藏起来,再也看不到了。为什么会这样?
我的代码是:
def main():
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
background = pygame.image.load('Background.png').convert()
screen.blit(background, (0, 0)) # draw the background screen
human1 = pygame.image.load('Human1.gif').convert()
human1_position = pygame.Rect(10, BOTTOM_FLOOR, CHARACTER_WIDTH, CHARACTER_HEIGHT)
screen.blit(human1, human1_position) # draw the first human
human2 = pygame.image.load('Human2.gif').convert()
human2_position = pygame.Rect(100, BOTTOM_FLOOR, CHARACTER_WIDTH, CHARACTER_HEIGHT)
screen.blit(human2, human2_position) # draw the second human
human3 = pygame.image.load('Human3.gif').convert()
human3_position = pygame.Rect(190, BOTTOM_FLOOR, CHARACTER_WIDTH, CHARACTER_HEIGHT)
screen.blit(human3, human3_position) # draw the third human
pygame.display.update() # display all graphical elements
move = STOP # Variable to track what the current move is. Initially, stopped
move_character = 1 # Variable to track which character is being moved
while True:
#
# See what the user did...
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
# Check if there is a move currently happening. The program
# will only do something if the previous move is stopped
if move == STOP:
# Check which key was pressed...
if event.key == pygame.K_1:
# if key pressed is the '1' key, move first human (and check if moving from bottom to top or other way)
move_character = 1 # the first character is to be moved
if human1_position.top < 300:
# If the 'top' of the human's position is less
# than 300 then it means the human is currenlty
# on the top half of the screen, and so
# the next move will be to move it downards
move = DOWN
else:
move = UP
# Check which key was pressed...
if event.key == pygame.K_2:
# if key pressed is the '2' key, move second human (and check if moving from bottom to top or other way)
move_character = 2 # the first character is to be moved
if human2_position.top < 300:
# If the 'top' of the human's position is less
# than 300 then it means the human is currenlty
# on the top half of the screen, and so
# the next move will be to move it downards
move = DOWN
else:
move = UP
screen.blit(background, human1_position, human1_position) # erase old position of first human
if (move == UP):
#they want to move up, so first check the lift is down with them.
if (liftLoc == "down"):
#they are both down, they can be moved into the lift
if (human1_position.left <= 245):
human1_position = human1_position.move(2, 0) # move first human
pygame.display.update()
else:
move = STOP
else:
print "Wrong floor!"
答案 0 :(得分:3)
所以你遇到的问题是,你只是渲染/ blitting你开始时移动的图像,所以它们会被“渲染”或渲染。 要摆脱这个问题,就像所有其他实时渲染引擎一样,你应该渲染你希望有人看到的所有内容,每一帧你想要发生什么。
我不会给你代码修正,只是将每个图像的screen.blit
移动到你的while循环中。它们的位置显然会影响渲染顺序。