【发布时间】:2016-03-22 04:13:58
【问题描述】:
我正在写一个终端游戏。它每秒重写游戏场。我希望用户通过按键进行交互。这是我想出的一个简化示例:
require 'io/console'
move = true
thr = Thread.new do
while move do
puts "Foo"
sleep(1)
end
end
loop do
input = $stdin.getch
if input == "a"
move = false
break
end
end
看起来它有效。但是我有一个来自thr 的奇怪输出,它搞乱了整个游戏领域:
【问题讨论】:
-
如果您正在制作游戏,您可能希望使用
curses库并有一个事件循环来检查键盘的可读状态。这里没有线程的原因。 -
线程如何正确输出?
-
当我尝试你的代码时,“Foo”总是写在行的开头,而不是像你的情况那样插入。这可能是因为终端设置不同。
puts在字符串的末尾写一个换行符,您使用的终端将换行符解释为一个换行符。当你写puts "Foo\r"时输出如何? -
user1934428 puts "Foo\r" 工作正常