Javascript游戏:如何;暂停;等待用户输入的while循环
我正在用javascript编写一个基于文本的游戏,其中一个主要的“功能”是一个输入框,它接受用户输入,并通过按钮标签提交输入。在我的主游戏循环中,调用按钮的onclick: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();
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