我有一个基本的回合制战斗游戏,您可以从输入from, ability, targ
发起攻击,并且一切正常,但是使用jquery和{{1} },我经历了调试器,并且代码按预期运行,但是第二次以相同的字符进行攻击时,它将运行我以前运行过的所有动画(来自animationEnd),然后进行第一次攻击,然后进行第二次攻击,以此类推。我的输入肯定是新鲜的,并且我清除了所有先前的输入,似乎只是将先前的功能保存到on(animationEnd
的某个位置,然后再次运行它们,是否有已知原因?并且有什么方法可以使它忘记来自目标on(animationEnd
的所有先前运行的功能吗?我几乎可以肯定,我只需要一种方法就可以解除链接先前使用的目标animationEnd的功能,或者最坏的情况是使用timeOut解决方法而不是animationEnd,但这是我的代码在不工作时的工作方式
on(animationEnd
上面是用户输入信息后的运行顺序,然后创建攻击然后运行,然后下面是他们要使用的功能
var targ=($(this).attr('id')); //the character u click on for who to attack
var from = optArray[0]; //all from previous inputs
var ability= optArray[2];
createAtt(from, ability, targ);
runAtt();
问题所在是在动画功能内的动画结束触发中,所有这些看上去都像这样
var attackQue=[];
var currentAtt;
var createAtt=function(from, ability, targ){ //pushes an array of 3 into a a parent array to que attacks
var x=[from, ability, targ];
attackQue.push(x);
};
function runAtt(){
if (attackQue.length===0) { //checks if there is attacks to be run from attQue
console.log('no attacks to run');
}
else if (!currentAtt) { //if theres attacks in que but nothing running
currentAtt=attackQue[0];
abilities[currentAtt[1]].func(currentAtt[0], currentAtt[2]); //this refers to the attacks object and its child function with relevent data
}
else{ //if theres attacks that in current attack that are being ran
console.log("already attacking");
}
}
因此,下一次我以相同的人(甚至是另一种能力)运行同一个人的一项功能时,先前的斜线将先运行第一个,然后再运行新的斜率,例如,我的X先生在斜线动画运行后将Y先生斜杠Y,下一次X先生动画结束后,他将iceBarrages Z先生进行攻击,X先生将先Y斜杠,然后将iceBarrage先生Z斜杠。X先生的var abilities={
slash:{
base: 100,
crit: true,
genus: "phys",
cast: false,
func:function(from, targ){
$("#"+from+">div.charDiv>img").removeClass().addClass("slash"); //this is the animation that will run once that then triggers the animationEnd
$("#"+from+">div.charDiv>img").on('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(){
//what ever is run below here will run will run every time
abilities.damage(from, "slash", targ);
turnOver(from); //clears inputs from attackQue and currentAtt
});
}
}
}
将这些功能添加到运行列表中
这里还有turnOver函数,它清除所有输入并查看是否还有另一种能力要运行
on(animationEnd