这是我的第一个问题。我想要实现的是在基于文本的游戏运行的正常窗口中,但是我也希望运行pygame窗口以显示更新的地图。提前谢谢。
答案 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循环。或者甚至有两个线程,一个用于两个线程。