2012-12-31 42 views
0

我正在制作一款FPS游戏。您可以看到它deployed on Heroku here(加载需要将近十秒钟,请稍候)。如何让敌人在短时间内射击?

即使玩家使用相同的逻辑,玩家也可以正常射击,但敌人无法射击。

刚刚拍摄功能被调用后子弹就会饱和。我需要敌人适当地延迟发射子弹,就像玩家射击时发生的一样。

这是我的代码。

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 library

回答

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);方法事情将继续创造更多的“计时器” - 你可能只需要一个。