2012-12-31 2 views
0

저는 FPS 게임을하고 있습니다. deployed on Heroku here을 볼 수 있습니다 (로드하는 데 약 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 library을 사용하고 있습니다.

답변

0

함수를 호출하기 전에 일정 시간 대기를 들어, clearInterval을 사용해야 https://developer.mozilla.org/en/docs/DOM/window.setTimeout

적의 촬영 총알을 중지하는 방법을 참조하십시오. 당신은 단지 하나를해야 할 수도 있습니다 - 당신이 업데이트에 지속적으로 setInterval(EnemyShooting(), 90000);를 호출하는 경우 현재 코드, 방법의 일을 더 "타이머"를 계속 만들 것

var enemyInterval = null; 

... 

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

참고.