2012-04-24 83 views
1

我有一个小型的jquery游戏,其中炮塔在其他动画中发射炮弹的动画在场地中移动。我的射弹被击中到迎面而来的div的最后位置,所以它从不击中。我需要的是一种改变弹道走向的方法,它总是会达到目标,因为它跟随目标。通过使用下面的方法,我可以接收弹丸的当前位置,但我不能将其修改为动画。如何在动画时更改jquery动画课程?

$(projectile).animate({"top":Y, "left": X},{duration:500, easing: 'linear',step: function(currentLeft,currentTop){ 
checkforenemies(); 
}, complete: function() { 
    $(projectile).remove(); 

}}); 

有没有办法在step:function中修改动画过程?

回答

1

一些approches浮现在脑海中: A)您可将动画进入步骤:如果目标改变了每一步的位置

function step(){ 
    while ($(projectile).length > 0){ // while projectile exists 
    $(projectile).animate({ 
     "top": getTargetY()/numberOfStepsItTakesToHitIt, 
     "left": getTargetX()/numberOfStepsItTakesToHitIt }, 
     {duration:500, easing: 'linear', complete: function() { 
     $(projectile).remove(); 
     } 
    }); 
    step(); 
    } 
} 

B)检查,如果是的话,停止动画和启动一个新问题:

function step(){ 
    if (targetMoved && $(projectile).length > 0){ 
    $(projectile).stop(); 
    $(projectile).animate({ 
     "top": getTargetY()/numberOfStepsItTakesToHitIt, 
     "left": getTargetX()/numberOfStepsItTakesToHitIt }, 
     {duration:500, easing: 'linear', step: step, complete: function() { 
     $(projectile).remove(); 
     } 
    }); 
    } 
} 

C)计算的目标轨迹(基于它的位置和速度),并猜测它未来的位置。比在那个地方着火并检查碰撞。

我最喜欢最后一种方法。弹道的轨迹不会弯曲,但它是最复杂的。

P.S .:我没有检查代码,所以它可能包含一些语义错误(甚至可能是逻辑错误)。