0

私はFPSゲームに取り組んでいます。こちらで Heroku にデプロイされていることがわかります(ロードに 10 秒近くかかるのでお待ちください)。

同じロジックを使用しているにもかかわらず、プレイヤーは適切に撃つことができますが、敵はできません。

射撃関数が呼び出された直後に弾丸が飽和します。プレイヤーが射撃するときと同じように、敵が適切な遅延で弾丸を発射する必要があります。

これが私のコードです。

   bulletTempEnemy = new J3D.Transform();

   bulletTempEnemy.geometry = J3D.Primitive.Sphere(0.5, 4, 4);
   bulletTempEnemy.renderer = J3D.BuiltinShaders.fetch("Normal2Color");

   bulletHolderEnemy = new J3D.Transform();

engine.scene.add(bulletHolderEnemy);



 function EnemyShooting(){

 bulletHolderEnemy.position.x =swat2.position.x;
 bulletHolderEnemy.position.y =swat2.position.y;
 bulletHolderEnemy.position.z =swat2.position.z;

  var b = bulletTempEnemy.clone();

  var f =v3.sub(first_person_controller.position,swat2.position).norm();
  b.direction = new v3(); 
  b.direction=f;

b.position.fromArray(f);
b.progress = 0;
b.ttl = 50;

b.animate = function() {
b.position = b.direction.cp().mult(1 + b.progress);
b.progress += 1;
b.ttl--;            

            if(b.ttl == 0) {
                bulletHolderEnemy.remove(b);
                             }
        }

        bulletHolderEnemy.add(b);
  }

以下のコードは、ゲーム ループ関数で呼び出されましたdraw()

 var zdis= Math.abs(Math.abs(Math.abs(swat2.position.z) -  Math.abs(first_person_controller.position.z)));
 var xdis= Math.abs(Math.abs(Math.abs(swat2.position.x) - Math.abs(first_person_controller.position.x)));


if(xdis < 80)
{
    setInterval(EnemyShooting(), 90000);

}



   for(var i = 0; i < bulletHolderEnemy.numChildren; i++) {
    bulletHolderEnemy.childAt(i).animate();
 }

J3D ライブラリを使用しています。

4

1 に答える 1

0

関数を呼び出す前に一定時間待機する方法については、https://developer.mozilla.org/en/docs/DOM/window.setTimeoutを参照してください。

敵の射撃弾を止めるには、 を使用する必要がありますclearInterval

var enemyInterval = null;

...

if (xdis < 80 && enemyInterval == null) {
    enemyInterval = enemysetInterval(EnemyShooting(), 90000);
}
if (xdis >= 80 && enemyInterval != null) {
    clearInterval(enemyInterval);
}

setInterval(EnemyShooting(), 90000);現在のコードでは、更新メソッドで継続的に呼び出している場合、さらに多くの「タイマー」が作成され続けることに注意してください。必要なのは 1 つだけです。

于 2012-12-31T05:38:42.930 に答える