1

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!"
4

1 に答える 1

3

したがって、あなたが抱えている問題は、開始時に移動する画像のみをレンダリング/ブリットしているため、「レンダリングされていない」またはレンダリングされていることです。この問題を解決するには、他のすべてのリアルタイム レンダリング エンジンと同様に、誰かに見てもらいたいすべてのフレーム、何かを発生させたいすべてのフレームをレンダリングする必要があります。

コードの修正は行いませんがscreen.blit、すべての画像の を while ループに移動するだけです。それらの位置は明らかにレンダリングの順序に影響します。

于 2012-11-19T01:29:05.180 に答える