0

我正在开发一款 FPS 游戏。你可以在这里看到它部署在 Heroku 上(加载大约需要十秒钟,所以请稍候)。

玩家可以正确射击,但敌人不能,即使他们使用相同的逻辑。

子弹在射击函数被调用后就饱和了。我需要敌人以适当的延迟射击子弹,就像玩家射击时发生的那样。

这是我的代码。

   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);在更新方法中连续调用,事情将继续创建更多“计时器” - 您可能只需要一个。

于 2012-12-31T05:38:42.930 回答