用户点击取消时如何替换背景图像?

时间:2017-08-09 23:22:35

标签: python pygame ctypes python-3.6

在我的游戏中,我可以选择允许用户通过单击MessawBoxW中的取消按钮来显示游戏的答案。但是,我不知道如何用我现有的背景图像替换背景图像。

如何设置一个事件,当用户点击取消时,游戏会在背景中点亮新图片所有内容?

我游戏的下面代码片段给出了一个错误说

Traceback (most recent call last):
  File, line 155, in <module>
    main()
  File, line 141, in main
    screen.blit(pg.transform.scale(background_image,event.dict['size']),(0,0))
UnboundLocalError: local variable 'background_image' referenced before assignment"
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True
        elif event.type == pg.MOUSEBUTTONDOWN:
            for sprite in all_sprites:
                if sprite.rect.collidepoint(event.pos):
                    selected = sprite
                    print(sprite.rect, "\n")
                    stored_posX = sprite.rect.left 
                    stored_posY = sprite.rect.top
                    break   
        elif event.type == pg.MOUSEBUTTONUP:
            selected = None    
            collided_sprites = pg.sprite.spritecollide(sprite, all_sprites, False)
            print(collided_sprites)
            while(len(collided_sprites) > 1):
                if sprite in collided_sprites:
                    result = Mbox('Error!', 'You cannot place an item over another, retry or cancel to display answer.', 5)
                    if result == IDRETRY:
                        collided_sprites[:] = [] #clear the list so that we can check it again for other sprites
                        update(sprite, stored_posX, stored_posY)
                    elif result == IDCANCEL:
                    background_image = pg.image.load("answerDoc.png").convert()
#above is the piece I do not understand
                        pg.display.flip()

                        #done = True
                        break   
        elif event.type == pg.MOUSEMOTION:
            if selected:
                selected.rect.center = event.pos
        elif event.type==VIDEORESIZE:
            screen = pg.display.set_mode(event.dict['size'],HWSURFACE|DOUBLEBUF|RESIZABLE)
            screen.blit(pg.transform.scale(background_image,event.dict['size']),(0,0))
            pg.display.flip()

            display_coordinates = pg.display.Info()
            print('current_w = ', display_coordinates.current_w, '\ncurrent_h = ', display_coordinates.current_h, '\n')

    all_sprites.update()
    screen.blit(pg.transform.scale(background_image, (1712,945)), (0,0))
    all_sprites.draw(screen)

    pg.display.flip()
    clock.tick(30)

if __name__ == '__main__':
main()
pg.quit()
sys.exit()

1 个答案:

答案 0 :(得分:0)

我不确定这是否有助于错误(我认为可能),但它看起来像这样:

                    elif result == IDCANCEL:
                    background_image = pg.image.load("answerDoc.png").convert()
#above is the piece I do not understand
                        pg.display.flip()

background_image = pg.image.load("answerDoc.png").convert()没有缩进,因此未正确更改。我不知道这是否能解决这个错误,但也许它会对某些事情有所帮助。