如何在移动时删除pygame中的重复图像

时间:2016-11-20 09:49:07

标签: python python-2.7 pygame

如何在移动时删除此气球副本

enter image description here

这是我的代码

lead_x = 0
lead_y = 400
balloonR_x = 400
balloonR_y = 400
balloonP_x = 500
balloonP_y = 400
balloonR_move = 50
#balloonB_x = 550
#balloonB_Y = 400

lead_y_change = 0 

gameExit = False



while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                lead_y_change -= 10
            elif event.key == pygame.K_DOWN:
                lead_y_change += 10
        if event.type == pygame.KEYUP:
            lead_y_change = 0



    lead_y += lead_y_change
    gamedisplay.blit(bg, [0,0])
    gamedisplay.blit(bow,[lead_x, lead_y])
    while balloonR_y >= 50:
        gamedisplay.blit(red_balloon, [balloonR_x, balloonR_y])
        pygame.display.update()
        pygame.event.clear(balloonR_y)
        clock.tick(1)
        balloonR_y -= balloonR_move
    #gamedisplay.blit(red_balloon, [balloonR_x, balloonR_y])
    gamedisplay.blit(purple_balloon, [balloonP_x, balloonP_y])
    #gamedisplay.blit(blue_balloon, [balloonB_x, balloonB_y])
    pygame.display.update()

    clock.tick(20)

并且如果我首先运行程序,那么气球循环首先执行,那时我无法控制箭头。

1 个答案:

答案 0 :(得分:1)

您不能使用while循环(以及任何长时间运行的函数或sleep())。

你必须只改变气球位置,让主while点亮背景和其他元素(并做其他事情,如处理事件,制作其他动画等)。

或多或少:

while not gameExit:

    # --- events ---

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                lead_y_change -= 10
            elif event.key == pygame.K_DOWN:
                lead_y_change += 10
        if event.type == pygame.KEYUP:
            lead_y_change = 0

    # --- updates (without draws) ---

    lead_y += lead_y_change

    if balloonR_y >= 50:
        balloonR_y -= balloonR_move

    # --- draws (without updates) ---

    gamedisplay.blit(bg, [0,0])
    gamedisplay.blit(bow,[lead_x, lead_y])

    gamedisplay.blit(red_balloon, [balloonR_x, balloonR_y])

    gamedisplay.blit(purple_balloon, [balloonP_x, balloonP_y])
    #gamedisplay.blit(blue_balloon, [balloonB_x, balloonB_y])
    pygame.display.update()

    clock.tick(20)