1

我有一个小型 jquery 游戏,其中炮塔向其他 div 发射射弹,这些 div 已被动画化以在场地上移动。我的射弹被发射到迎面而来的 div 附近的最后一个位置,所以它永远不会击中。我需要的是一种方法来改变射弹的运动轨迹,因为它会跟随它,所以它总是会击中目标。通过使用下面的方法,我可以接收弹丸的当前位置,但我不能修改它作为动画。

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

}});

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

4

1 回答 1

1

我想到了一些方法: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)计算目标轨迹(基于它的位置和速度)并猜测它的未来位置。比在那个地方开火并检查碰撞。

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

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

于 2012-04-25T11:43:28.323 回答