繁体   English   中英

Pygame 项目,屏幕不会在一个 function 中更新,但它适用于其他两个功能

[英]Pygame project, screen doesn't update in one function, but it works within two other functions

我的 pygame 项目由几个部分组成,包括全局 map 和城镇。 我使用一个游戏 class 来包含必要的对象。 所有游戏都显示在一个屏幕上,并且与全局 map 和城镇(in_city 功能)一起正常工作,它会更改屏幕并显示必要的信息,但是当我调用另一个 function(购买)时,它不会更新屏幕。

def buy(self):
    while self.running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False
            if event.type == pygame.KEYDOWN:
                return

        self.screen.fill('BLACK')
        pygame.display.update()
        pygame.display.flip()

def in_city(self):
    while self.running:
        stop = False
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False
            if event.type == pygame.MOUSEMOTION:
                all_sprites.update(pygame.mouse.get_pos())
            if event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = pygame.mouse.get_pos()
                button_right.click(mouse_pos)
                button_left.click(mouse_pos)
                button_next.click(mouse_pos)
                button_prev.click(mouse_pos)
                if button_close.on_button(mouse_pos):
                    stop = True
            if event.type == pygame.KEYDOWN:
                self.buy()
    
        if stop:
            self.player.route = [(0, 0)]
            self.player.next_move(self.maps)
            self.camera.update(self.player)
            return

        screen.fill('WHITE')
        city.render(screen)

        current_text = city.enemies[city.current_enemy]
        window.show(screen, current_text.get_text())

        print(current_text.goods)

        all_sprites.draw(screen)


        pygame.display.update()
        pygame.display.flip()`

永远不要递归地运行游戏循环。 根据状态使用一个应用程序循环来绘制场景。 您永远不应该在事件中跳转到另一个应用程序循环。 该事件应仅更改用于绘制场景的 state。 例如:

game_state = 'A'
run = True
while run:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if event.type == pygame.KEYDOWN:
            game_state = 'B'      


    screen.fill('WHITE')

    if game_state == 'A':
        # draw scene A

    elif game_state == 'B':
        # draw scene B

    pygame.display.flip()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM