Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript游戏:如何;暂停;等待用户输入的while循环_Javascript_Html_Loops - Fatal编程技术网

Javascript游戏:如何;暂停;等待用户输入的while循环

Javascript游戏:如何;暂停;等待用户输入的while循环,javascript,html,loops,Javascript,Html,Loops,我正在用javascript编写一个基于文本的游戏,其中一个主要的“功能”是一个输入框,它接受用户输入,并通过按钮标签提交输入。在我的主游戏循环中,调用按钮的onclick: var game_u = new game_util(); function Game_Main(){ while(active){ input = game_u.getText();

我正在用javascript编写一个基于文本的游戏,其中一个主要的“功能”是一个输入框,它接受用户输入,并通过按钮标签提交输入。在我的主游戏循环中,调用按钮的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;
                        }
                    }
                } 
然而,这种方式的问题是while循环不会“等待”单击submit按钮以从'game_.getText()获取输入;函数并继续循环

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

我也来自Java,一种面向对象的编程语言,所以我使用while循环


感谢您的帮助

如果要暂停用户输入,可以使用一个简单的
prompt()

试试这个:

var input = prompt("Enter data here", "");
这将等待输入并将其存储到变量
input

请参阅JSFiddle.net上的


AFAIK,同步JS是不可能的,根据:

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

关于你的问题,

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

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

因此,不是这样:

while(active) {
    input = game_u.getText();
    p = new player();
    active = false;
}
你可以做:

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

这将在每次单击按钮时运行代码,基本上与您尝试执行的操作相同。

您在评论中获得了一些非常好的信息。事件模型可能是理想的,但您可以执行持久循环。我对它不太熟悉,但HTML5画布就是这样。因为还没有其他人提到过,所以可以研究一下。一种方法是将游戏的不同阶段分解为与不同阶段(房间、关卡等)对应的功能,这些功能根据用户的输入进行调用;您还需要一个变量来保存游戏的当前状态(下例中为
room

(功能游戏(){
var房间=1;
document.getElementById('playerSubmit')。addEventListener('click',function(){
var playerInput=document.getElementById('playerInput').value;
如果(playerInput==“去2号房间”){
房间=2间;
}
如果(playerInput==“去1号房间”){
房间=1;
}
如果(房间==1){
1号房间(playerInput);
}否则,如果(房间==2){
2号房间(playerInput);
}
document.getElementById('playerInput')。值=“”;
});
功能室1(播放器输入){
输出('您在第一个房间,输入命令'+playerInput');
}
功能室2(播放机输入){
输出(“现在您在房间2,您的命令是“+playerInput”);
}
函数输出(文本){
document.getElementById('output').innerHTML+=''+text+'

'; } })();
#输出{
边框:纯色1px蓝色;
宽度:500px;
高度:400px;
溢出:滚动;
}
标签{
显示:块;页边距顶部:1em;
}

播放器输入

一个
提示符
框,如
警报
会暂停执行,当点击按钮时,可能会将Move game_.getText()复制到一个全局变量中,然后在游戏循环的一次迭代中读取后将其设置回空白,从而在游戏循环中“消费”该变量。这是一种可能性。注意:持久的javascript循环有点不寻常。你可能想看看如何使用callback。首先,你不应该在这里使用
while
循环,而是要接受javascript是一种事件驱动语言这一事实。我试图避免使用prompt方法,因为它破坏了我游戏的沉浸感。白色弹出框不是我想做的,谢谢。我玩这个临时游戏玩得很开心=)+1