【问题标题】:Making a function that changes a variable every 3rd second制作一个每 3 秒更改一次变量的函数
【发布时间】:2018-05-12 09:55:28
【问题描述】:

我正在制作一个小游戏,我想制作一些每 3 秒改变一次 x 位置的点。我的问题是它只打印出第一个值。 我试图让它尽可能简单。

我尝试了 console.log(i),发现循环运行良好,但 randomX 变量变化不止一次。

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

function makeRandomXPosition(){

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


makeRandomXPosition();
console.log(randomX);

【问题讨论】:

    标签: javascript function settimeout var


    【解决方案1】:

    你有什么作品。只是因为你把console.log()放在哪里,它看起来只做了一次。把它移到函数中,你会看到它每次都在变化。

    var randomX = 0;
    var i = 0, spawnXCount = 10;
    
    function makeRandomXPosition(){
        i++;
        if (i < spawnXCount){
            setTimeout(makeRandomXPosition, 3000);	
        }
        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();

    在游戏中,您通常会有一个主游戏循环,负责触发所有基于时间的事物并做出整体决策。

    【讨论】:

    • 谢谢!是的,我现在意识到了。知道如何修复您提到的最后一部分吗?
    • 我提到的doSomething() 可以重命名为loop(),这将是您的主要游戏循环。然后你会根据条件做一些事情,一个接一个地列出每个功能。从if() 中取出setTimeout() 并使其始终运行。那个时间会给你你的 FPS(每秒帧数)(所以如果你想以 60 FPS 运行,你可以给它 1000 / 60。
    • 您可以查看我大约一年前制作的一些非常简单的游戏示例:github.com/samanime/learning-games
    • 是的,我有一个名为 draw() 的主函数和 requestAnimationFrame()
    猜你喜欢
    • 2015-01-01
    • 2021-04-06
    • 2016-01-15
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2017-01-24
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多