我开始制作文字游戏,基本思路是: 当游戏开始时,用户必须将他的选择输入到输入字段中。他输入的文本与函数内的开关交互,如果用户输入"右命令",则调用另一个可能包含另一个开关的功能,依此类推。 我在这段代码中有一个错误: 第一个功能内部的开关运行良好,当它的第一个案例(case" yes")调用另一个函数时,一切都开始正常工作。但是当用户输入应该与第二个功能的开关交互的文本时,他实际上仍然与第一个功能的开关(以及第二个功能的开关)进行交互。 有人愿意帮助我解决它,甚至指出我正确的方向吗?
var startGame = function(){
showText("Welcome to the virtual pseudo-reality")
showText("Are you ready to start your journey?")
$('#btn').click(function(e) {
e.preventDefault();
switch ($('input[name=myInput]').val().toLowerCase()) {
case "yes": showText("- "+$('input[name=myInput]').val());
showText("Welcome aboard!");
selectChar();
break;
case "no": showText("- "+$('input[name=myInput]').val());
showText("Your choise is no.");
break;
default:
showText("- "+$('input[name=myInput]').val());
showText("Sorry, wrong input.") ;
break;
};
$('input[name=myInput]').val('');
var element = document.getElementById("storyBoard");
element.scrollTop = element.scrollHeight;
});
};
//A first in-game function, needs to select the character that user want to be:
var selectChar = function(){
showText("<br>"+"Choose who you are, you have to choose one of two heroes: Phantomorph and Disogr.");
$('#btn').click(function(e) {
e.preventDefault();
switch ($('input[name=myInput]').val().toLowerCase()) {
case "phantomorph": showText("- "+$('input[name=myInput]').val());
showText("You choosed Phantomorph.");
user = phantomorph; friend = disogr;
break;
case "disogr": showText("- "+$('input[name=myInput]').val());
showText("You choosed Disogr.");
user = disogr; friend = phantomorph;
break;
default: alert("You need to make a right choose.");
selectChar();
break;
};
$('input[name=myInput]').val('');
var element = document.getElementById("storyBoard");
element.scrollTop = element.scrollHeight;
});
};
startGame();
&#13;
答案 0 :(得分:1)
您正在将多个事件绑定到同一个输入,以便当用户第二次单击两个事件处理程序回调时执行。
由于您使用的是jQuery,我会从使用.click
切换到.on('click'
,然后在绑定第二个点击处理程序的切换案例中,您可以使用.off('click'
删除初始处理程序。
最好还是有一个变量来跟踪你的游戏状态,并将第二个事件处理程序的绑定移出开关案例。您需要这样做,否则每次用户点击都会重新绑定点击处理程序。
[编辑]
你可以一次添加任意数量的事件处理程序,只要DOM元素准备就绪(在jQuery文档就绪回调中),或只绑定一个click事件并在事件处理程序中包含逻辑来检查你的数据&# 39;已经从用户处捕获以触发任意行为。
我建议您创建一个click
处理程序,并在回调中检查user
变量的值,以查看用户是否已为其设置了值。 (您只需要确保您的点击处理程序可以访问该变量的范围,以及您的应用程序中需要它的任何部分,目前在您的示例中没有var user;
)