首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >setInterval不会调用函数

setInterval不会调用函数
EN

Stack Overflow用户
提问于 2019-02-17 03:52:58
回答 3查看 54关注 0票数 0

我正在尝试创建一种生态系统,其中对象随着时间的推移而产生。然而,当我尝试使用setInterval来增加数量时,它并不起作用。当我自己调用函数时,它可以工作,但当我使用setInterval时就不行了。

代码语言:javascript
运行
复制
var plantSpawn = 5;

function createPlants() {

    setInterval(reproducePlants, 5000);

    for(var i=0; i<plantSpawn; i++){

        var plant = new Object();
            plant.x = Math.random() * canvas.width;
            plant.y = Math.random() * canvas.height;
            plant.rad = 2;
            plant.skin = 'green';

        myPlants[i] = plant;

    }
}   

function reproducePlants() {
    plantSpawn += 5;
}

我的目标是每5秒,就会有5株新的植物出现。但是,当我在setInterval中使用reproducePlants函数时,它不起作用。

注意:我稍后会在代码中调用createPlants(),它会显示前5个植物,但不会显示下5个植物。我只是展示了我正在尝试修复的代码

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-17 04:08:48

必须将创建代码移动到重复调用的函数中。

注意:如果要无限多次调用reproducePlants,这不是一种有效的方法,因为每次都会重新构造myPlants数组。

代码语言:javascript
运行
复制
// Init with 0, because we increment it inside reproduce Plants
var plantSpawn = 0;
var myPlants = [];

function createPlants() {
    reproducePlants();
    setInterval(reproducePlants, 5000);
}   

function reproducePlants() {
    const canvas = document.getElementsByTagName('canvas')[0];
    plantSpawn += 5;

    for(var i = 0; i < plantSpawn; i++) {
        var plant = new Object();
        plant.x = Math.random() * canvas.width;
        plant.y = Math.random() * canvas.height;
        plant.rad = 2;
        plant.skin = 'green';

        myPlants[i] = plant;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-02-17 04:03:19

您不一定需要从reproducePlants函数调用createPlants函数。您可以在这两个函数之后添加一个调用。如果我理解你想要实现的目标,我就应该这么做。

票数 0
EN

Stack Overflow用户

发布于 2019-02-17 04:32:01

您需要将创建植物的代码( for()块)移到每5秒调用一次的函数中(复制植物)。因此,每次调用该函数时,它都会创建植物。

如果你想每隔5秒就添加5个新的植物到你的植物数组中,你不应该每次都重新创建这个数组。最好跟踪您添加的最后一个索引,然后立即继续。

我创建了一个名为lastCreatedIndex的变量,这样您就可以更好地了解发生了什么。因此,第一次代码将从0到4运行plants[i],第二次从5到9...

代码语言:javascript
运行
复制
var myPlants = [];
var lastCreatedIndex;
var plantSpawn;


function createPlants() {
    plantSpawn = 5; //Initialize with 5 plants
    lastCreatedIndex = 0; // Starts from index 0
    reproducePlants();
    setInterval(reproducePlants, 5000);
}   

function reproducePlants() {

    for(var i = 0 + lastCreatedIndex; i < plantSpawn; i++) {
        var plant = new Object();
        plant.x = Math.random() * canvas.width;
        plant.y = Math.random() * canvas.height;
        plant.rad = 2;
        plant.skin = 'green';

        myPlants[i] = plant;
        console.log(i); // Output the number of the plant that has been added
    }
    lastCreatedIndex = i; //Update the last index value
    plantSpawn += 5;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54727071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档