1

フィールドを横切って移動するようにアニメーション化された他のdivでタレットが発射物を発射する小さなjqueryゲームがあります。私の発射体は、対向する div が近くにあった最後の位置に発射されるため、ヒットすることはありません。私が必要としているのは、発射体が移動するにつれて発射体のコースを変更する方法であり、それは常にターゲットに当たるためです。以下の方法を使用すると、発射体の現在の位置を受け取ることができますが、アニメーション化されているため変更できません。

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

}});

step: 関数内でアニメーションのコースを変更する方法はありますか?

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 に答える