我想知道在python中是否有一种方法,即我的games.screen.mainloop()中的图形片段正在运行,如果我可以通过raw_input()从控制台获取用户输入。< / p>
答案 0 :(得分:4)
是的,请看下面的例子:
import pygame
import threading
import Queue
pygame.init()
screen = pygame.display.set_mode((300, 300))
quit_game = False
commands = Queue.Queue()
pos = 10, 10
m = {'w': (0, -10),
'a': (-10, 0),
's': (0, 10),
'd': (10, 0)}
class Input(threading.Thread):
def run(self):
while not quit_game:
command = raw_input()
commands.put(command)
i = Input()
i.start()
old_pos = []
while not quit_game:
try:
command = commands.get(False)
except Queue.Empty:
command = None
if command in m:
old_pos.append(pos)
pos = map(sum, zip(pos, m[command]))
if pygame.event.get(pygame.QUIT):
print "press enter to exit"
quit_game = True
pygame.event.poll()
screen.fill((0, 0, 0))
for p in old_pos:
pygame.draw.circle(screen, (50, 0, 0), p, 10, 2)
pygame.draw.circle(screen, (200, 0, 0), pos, 10, 2)
pygame.display.flip()
i.join()
它会创建一个小红圈。您可以将 w , a , s 或 d 输入到控制台中来移动它。
答案 1 :(得分:0)
关键是,如果你执行类似raw_input
之类的操作,它将停止程序,直到输入输入为止,这将使程序停止每个循环以获取输入,但你可以执行{{1}之类的操作但是他们会打印每个循环
如果您想使用输入InputBox Module,这会在循环中的屏幕上弹出一个小输入框
如果您想从控制台进行操作,您可以尝试线程,我不熟悉但你可以查看Multi-threading Tutorial
这是一个可以帮助你的问题
祝你好运! :)