2017-11-28 24 views
0

작은 게임을 만들고 있는데, 3 초마다 x 위치가 변경되는 점을 만들고 싶습니다. 내 겉으로보기에 그것은 첫 번째 가치 밖에 인쇄하지 않는다는 것입니다. 나는 가능한 한 간단하게하려고 노력하고있다.3 초마다 변수를 변경하는 함수 만들기

나는 console.log (i)를 시도했는데 루프가 정상적으로 작동했지만 randomX var이 두 번 이상 변경되지 않는다고 생각했습니다.

var randomX = 0; 
 
var i = 0, spawnXCount = 10; 
 

 
function makeRandomXPosition(){ 
 

 
\t i++; 
 
\t if (i < spawnXCount){ 
 
\t \t setTimeout(makeRandomXPosition, 3000); 
 
\t \t 
 
\t } 
 
\t randomX = Math.floor(Math.random()*1000)+1; 
 
} 
 

 

 
makeRandomXPosition(); 
 
console.log(randomX);

답변

2

당신은 작품이 무엇. 단지 당신이 당신의 console.log()을 두는 곳 때문에 한번만하는 것처럼 보입니다. 기능으로 이동하면 매번 변경되는 것을 확인할 수 있습니다.

var randomX = 0; 
 
var i = 0, spawnXCount = 10; 
 

 
function makeRandomXPosition(){ 
 
    i++; 
 
    if (i < spawnXCount){ 
 
     setTimeout(makeRandomXPosition, 3000); \t 
 
    } 
 
    randomX = Math.floor(Math.random()*1000)+1; 
 
    console.log(randomX); 
 
} 
 

 

 
makeRandomXPosition();

당신이 randomX 뭔가를하고 싶은 경우

, 당신은 뭔가 호출 makeRandomXPosition() 다음 나중에 그 일을 할 것을 가지고, 타이머에 뭔가 다른, 또는 아마도 더 나은해야 하나.

var randomX = 0; 
 
var i = 0, spawnXCount = 10; 
 

 
function makeRandomXPosition(){ 
 
    i++; 
 
    randomX = Math.floor(Math.random()*1000)+1; 
 
} 
 

 
function doSomething() { 
 
    makeRandomXPosition(); 
 
    console.log(randomX); // do something with randomX 
 
    
 
    if (i < spawnXCount) { 
 
    setTimeout(doSomething, 3000); 
 
    } 
 
} 
 

 

 
doSomething();
게임에서

, 당신은 일반적으로 모든 시간을 기반으로 일을 트리거링 및 전반적인 의사 결정을 담당하는 주요 게임 루프를해야합니다.

+0

감사! 네, 이제 깨달았습니다. 네가 언급 한 그 마지막 부분을 어떻게 고쳐 줄 수 있니? – Benjamhw

+0

내가 언급 한'doSomething()'은'loop()'로 이름을 바꿀 수 있으며 게임 루프가 될 것입니다. 그런 다음 각 기능을 차례대로 나열하여 조건에 따라 특정 작업을 수행하게됩니다. 'if()'밖에서'setTimeout()'을 가져 와서 항상 실행 시키십시오. 그 시간은 당신에게 당신의 FPS (초당 프레임 수)를 줄 것입니다. 그래서 60 FPS로 달리고 싶다면 1000/60을 줄 수 있습니다. – samanime

+0

1 년 전에 만든 아주 간단한 게임 클래스를 가르치기 위해 만들었습니다 : https://github.com/samanime/learning-games – samanime