【发布时间】:2014-12-02 09:22:41
【问题描述】:
我正在尝试用 Dart 制作一个简单的 RPG。我需要在 div 中的屏幕上显示文本,并且我需要让程序在显示下一段文本之前等待用户输入。
例如:
void main() {
showText("Hello, Adventurer! Welcome to the land of Dartia! (Press ENTER to continue...)");
print("showText has finished");
}
"showText has finished" 不应该显示,直到文本显示并且玩家按下回车键。这是我到目前为止的(在我看来非常丑陋的)代码:
void showText(String text) {
var textBox = querySelector("#sample_text_id")
..text = "";
var timer;
var out;
out = ([int i = 0]) {
textBox.text += text[i];
if (i < text.length - 1) timer = new Timer(const Duration(milliseconds: 10), () => out(i + 1));
};
out();
}
计时器异步运行out() 函数,我不希望它这样做。理想情况下,我想写这样的东西:
void showText(String text) {
var textBox = querySelector("#sample_text_id")
..text = "";
for(int i = 0; i < text.length; i++) {
textBox.text += text[i];
pause(const Duration(milliseconds: 10)); // pause the program for given duration
}
waitFor(KeyEnum.ENTER, KeyStateEnum.DOWN); // pause until key is pressed (pseudo Enum contains char codes)
}
这可能吗?
【问题讨论】:
-
Dart 有 await 表达式,参见文档dartlang.org/articles/await-async/#await-expressions
-
dart:html有一个带有所有关键代码的KeyCode枚举。您不需要自己维护。