在PyGame中移动图像会隐藏所有其他图像

时间:2012-10-22 11:54:22

标签: python pygame

当我在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!"

1 个答案:

答案 0 :(得分:3)

所以你遇到的问题是,你只是渲染/ blitting你开始时移动的图像,所以它们会被“渲染”或渲染。 要摆脱这个问题,就像所有其他实时渲染引擎一样,你应该渲染你希望有人看到的所有内容,每一帧你想要发生什么。

我不会给你代码修正,只是将每个图像的screen.blit移动到你的while循环中。它们的位置显然会影响渲染顺序。