4

我想知道在 python 中是否有一种方法,当我的 games.screen.mainloop() 中的图形部分正在运行时,如果我可以做一些事情,比如从控制台通过 raw_input() 获取用户输入。

4

2 回答 2

4

是的,看看下面的例子:

import pygame
import threading
import queue

pygame.init()
screen = pygame.display.set_mode((300, 300))
quit_game = False

commands = queue.Queue()

pos = pygame.Vector2(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 = 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((int(pos.x), int(pos.y)))
    pos += m[command]

  for e in pygame.event.get():
    if e.type == pygame.QUIT:
      print("press enter to exit")
      quit_game = True

  screen.fill((0, 0, 0))
  for p in old_pos:
      pygame.draw.circle(screen, (75, 0, 0), p, 10, 2)
  pygame.draw.circle(screen, (200, 0, 0), (int(pos.x), int(pos.y)), 10, 2)
  pygame.display.flip()

i.join()

它创建了一个红色的小圆圈。您可以通过输入 、 或w进入a控制台来移动它。sd

在此处输入图像描述

于 2013-07-11T19:05:22.283 回答
0

事情是这样的,如果你做类似的事情,raw_input它会停止程序,直到输入输入,这样每个循环都会停止程序接受输入,但你可以做类似的事情,print但他们会打印每个循环

如果你想输入使用InputBox Module这将在循环中的屏幕上弹出一个小输入框

如果您想从控制台执行此操作,您可以尝试使用我不熟悉的线程,但您可以查看多线程教程

这是一个可以帮助你的问题

Pygame 写入终端

祝你好运!:)

于 2013-07-11T15:33:35.273 回答