Javascript游戏:如何“暂停” while循环以等待用户输入

The*_*ter 5 html javascript loops

我正在用javascript编写基于文本的游戏,主要的“功能”之一是输入框,它接受用户输入,并通过button标签提交输入。在我的主游戏循环中,调用按钮的onclick:

var game_u = new game_util();

                function Game_Main(){
                    while(active){
                        input = game_u.getText();
                        //p = new player();
                        active = false;
                    }
                }

                function game_util(){
                    this.getText = function(){
                        //The Submit button 
                        confirm_plr.onclick = function(){
                            //Input value
                            return player_in.value;
                        }
                    }
                } 
Run Code Online (Sandbox Code Playgroud)

这种方式的问题是,while循环不会“等待”单击提交按钮以从game_u.getText()获取输入。功能并继续循环。

我有更好的方法吗?这是我第一次玩文字游戏?我不想使用提示方法,因为它破坏了游戏的沉浸感。

我也是来自Java(一种面向对象的编程语言),所以这就是为什么要使用while循环的原因。

任何帮助表示赞赏。

Jon*_*Lam 4

如果您想通过用户输入来暂停,一个简单的prompt()框就可以了。

尝试这个:

var input = prompt("Enter data here", "");
Run Code Online (Sandbox Code Playgroud)

这将等待输入并将其存储到变量中input

请参阅JSFiddle.net 上的工作示例


AFAIK,同步 JS 是不可能的,根据这个 SO post

JavaScript 是异步的,你不能“暂停”执行。此外,当 JavaScript 运行时,整个用户界面会冻结,因此用户无法单击按钮。

至于你的问题,

如果我不应该使用 while 循环,那么什么可以替代它?

因为 JS 是事件驱动的,并且每次单击该按钮(并输入输入)时您都尝试运行代码,因此只需使用处理程序即可onclick

所以,而不是这样:

while(active) {
    input = game_u.getText();
    p = new player();
    active = false;
}
Run Code Online (Sandbox Code Playgroud)

你可以做:

document.getElementById("button").addEventListener("click", function() {
    input = game_u.getText();
    p = new player();
    active = false;
});
Run Code Online (Sandbox Code Playgroud)

每次单击按钮时都会运行代码,本质上与您尝试执行的操作相同。