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

时间:2016-09-17 07:06:09

标签: python pygame

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

4 个答案:

答案 0 :(得分:2)

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

挑战将是如何异步获取用户输入(不阻塞)。

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

在以下问题中,针对该特定挑战有多种解决方案:Non-blocking read on a subprocess.PIPE in python

另一个想法是在图形窗口中获取输入。

答案 1 :(得分:0)

Pygame只支持一个显示。但是,您可以将屏幕划分为多个Surfaces,其中一个Surface用于地图,另一个用于游戏。

这样的事情:

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()

答案 2 :(得分:0)

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

答案 3 :(得分:0)

通过普通窗口,我猜你的意思是你的程序运行的控制台窗口。
你需要一个线程
在下面例如,该线程是从命令行读取标准输入的线程。

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循环。或者甚至有两个线程,一个用于两个线程。