你好!
除了在p5.js中,我正在尝试制作一个BlackThornProd频道上的地下城生成程序。我有一个生成其他房间的生成器函数,我将所有房间都作为函数,并且我有4个数组来存储不同的房间。我的问题是,我必须访问spawner函数中的数组,但是spawner函数必须在room函数之上,而room函数必须在数组之上。像这样:
var spawner = function(x, y, value) {
switch(value) {
case 1:
topRooms[random(0, topRooms.length)](x, y);
break;
case 2:
bottomRooms[random(0, bottomRooms.length)](x, y);
break;
case 3:
leftRooms[random(0, leftRooms.length)](x, y);
break;
case 4:
rightRooms[random(0, rightRooms.length)](x, y);
break;
}
};
var start = function(x, y) {
pushMatrix();
translate(x, y);
rect(-25, -25, 20, 1); //Top Left
rect(25, -25, -20, 1); //Top Right
rect(25, 25, -20, 1); //Bottom Right
rect(-25, 25, 20, 1); //Bottom Left
rect(25, -25, 1, 20); //Right Top
rect(25, 25, 1, -20); //Right Bottom
rect(-25, 25, 1, -20); //Left Bottom
rect(-25, -25, 1, 20); //Left Top
popMatrix();
};
var topRooms = [];
var bottomRooms = [];
var leftRooms = [];
var rightRooms = [];
如您所见,必须从阵列上方的生成器访问阵列。我不知道是否有一种方法可以访问代码下面的内容,但是我使用的环境不喜欢它。
如果您知道解决方案,请回复。谢谢!
答案 0 :(得分:4)
使用 var 关键字声明的数组会被提升 ,因此即使您稍后声明它们,它们也将始终移至脚本顶部。
如果您的代码不完整(我看不到数组的填充位置),则可能是您尝试在其中调用函数时遇到的问题。
可以通过在调用该函数之前进行简单的检查来解决此问题:
case 1:
topRooms[random(0, topRooms.length)] && topRooms[random(0, topRooms.length)](x, y);
break;