Python/Pygame:你可以运行一个程序,同时有一个Pygame窗口,仍然可以更新



我的第一个问题。我想要实现的是在一个正常的窗口中基于文本的游戏正在运行,但是我也想有一个pygame窗口运行,以及显示更新的地图。

可能在Pygame的情况下,您可以同时输出到图形窗口和标准文本输出。

挑战在于如何异步(无阻塞)获取用户输入。

虽然threads是一个很好的解决方案,但还有其他的。

在下面的问题中,有几种解决方案来解决这个特殊的挑战:python中的PIPE

Pygame只支持一次显示。然而,你可以将屏幕划分为多个表面,其中一个表面用于地图,另一个用于游戏。

像这样:

screen = pygame.display.set_mode((100, 100))
top_rect = pygame.Rect((0, 0), (screen.get_width(), screen.get_height() // 2))
bottom_rect = pygame.Rect((0, screen.get_height() // 2), (screen.get_width(), screen.get_height() // 2))
top_screen = screen.subsurface(top_rect)
bottom_screen = screen.subsurface(bottom_rect)

并更新它们:

screen.blit(top_screen)
screen.blit(bottom_screen)
pygame.display.update()

将文本条目与pygame窗口分开的唯一方法是使用someVar = input("A string"),以便文本输入在python shell或命令窗口/Linux终端中,然后让pygame引用var.

所谓的正常窗口,我想你是指程序运行的控制台窗口。你需要一个线程
在下面的示例中,该线程是从命令行读取标准输入的线程。

from threading import Thread
userInput= None
def readInput():
    while True:
        userInput = raw_input (" where to ? ")
        print("%s ok."%userInput)
t = Thread( target=readInput )
t.start()

您也可以将while循环作为程序的主循环,线程将运行pygame循环。或者甚至有两个线程,一个用于两个。

最新更新