javascript - 增加数组数量而不重置它(Javascript/Canvas)
问题描述
在我的项目中,我希望我的数组每 5 秒增加一次。我尝试使用 setInterval 调用一个函数来执行此操作,但它每 5 秒重置一次我的数组,数量增加而不是自然增长。有没有办法增加数量而不必每次都重置数组?
这些是我用来称呼我的“植物”的功能:
var myPlants = new Array();
var plantSpawn = 0;
function createPlants() {
reproducePlants();
setInterval(reproducePlants, 5000);
}
function reproducePlants() {
plantSpawn += 5;
for(var i=0; i<plantSpawn; i++){
var rr = Math.round(Math.random() * 150);
var gg = Math.round(Math.random() * 255);
var bb = Math.round(Math.random() * 150);
var plant = new Object();
plant.x = Math.random() * canvas.width;
plant.y = Math.random() * canvas.height;
plant.rad = 2;
plant.skin = 'rgba('+rr+','+gg+','+bb+', 1)';
myPlants[i] = plant;
}
}
解决方案
执行此操作时,您正在显式重置数组的所有值:
for(var i=0; i < plantSpawn; i++){... myPlants[i] = plant; ...}
请注意,plantSpawn
它将保存新的数组大小,因此您将遍历所有旧索引以及新索引并重新分配它们的值。
因此,您可以使用Array.push()以这种方式将5
新元素添加到数组中:
var myPlants = new Array();
var plantsInc = 5;
function createPlants()
{
reproducePlants();
setInterval(reproducePlants, 5000);
}
function reproducePlants()
{
// Push N new plants on the array.
for (var i = 0; i < plantsInc; i++)
{
var rr = Math.round(Math.random() * 150);
var gg = Math.round(Math.random() * 255);
var bb = Math.round(Math.random() * 150);
var plant = new Object();
plant.x = Math.random() * canvas.width;
plant.y = Math.random() * canvas.height;
plant.rad = 2;
plant.skin = 'rgba('+rr+','+gg+','+bb+', 1)';
// Push a new plant on the array.
myPlants.push(plant);
}
}
作为建议,您甚至可以将创建新工厂的逻辑封装在方法中,如下所示:
var myPlants = new Array();
var plantsInc = 5;
function createPlants()
{
reproducePlants();
setInterval(reproducePlants, 5000);
}
function createPlant()
{
var rr = Math.round(Math.random() * 150);
var gg = Math.round(Math.random() * 255);
var bb = Math.round(Math.random() * 150);
var plant = new Object();
plant.x = Math.random() * canvas.width;
plant.y = Math.random() * canvas.height;
plant.rad = 2;
plant.skin = 'rgba('+rr+','+gg+','+bb+', 1)';
return plant;
}
function reproducePlants()
{
// Push N new plants on the array.
for (var i = 0; i < plantsInc; i++)
{
myPlants.push(createPlant());
}
}
推荐阅读
- r - RS硒; 循环和下载 csv 文件
- react-native - 如何删除域数据库中的表(架构中的类)不是反应原生的?
- amazon-web-services - 由于未安装 sklearn,Docker 未构建映像
- vba - Access VBA Userfrom 打开,组合框在关闭制表位的情况下获得焦点
- javascript - 计算 ul 中 li 的数量并分配类
- sql - 如何以 sysdba 身份登录 sql * plus?
- sql - 使用 LAG 创建 ID 活动时间线
- javascript - 这是顺序运行代码片段的好方法吗?
- javascript - 用星号或最后两个单词替换最后一个单词
- git - 如何列出从特定分支的任何提交创建的所有 git 分支