animationend每次都会运行所有先前运行的功能

时间:2019-03-08 03:36:16

标签: javascript jquery jquery-animate

我有一个基本的回合制战斗游戏,您可以从输入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

0 个答案:

没有答案