【发布时间】:2015-08-18 20:23:46
【问题描述】:
在开发 Javascript/HTML5 画布游戏时,我试图通过在函数开头设置数组 waterTilesCheck 等于原始 waterTiles 数组来使函数在水填满区域后停止,然后在最后比较它们。如果对原始水阵列进行了更改,我希望该函数再次运行,但是如果在运行该函数结束时没有任何更改,我希望它通过说waterComplete = true 停止运行。 waterTiles数组中的每个对象都有x、y、width、height和tag属性,但是tag属性是唯一需要比较的。
function fillWater (modifier) {
waterTilesCheck = waterTiles;
for (var i = 0; i < waterTiles.length; i++) {
//get tiles to the left, right, above and below of i
var l = i - (worldDim.height + 1);
var r = i + (worldDim.height + 1);
var u = i + 1;
var d = i - 1;
//just a sample of some of the logic used to move water
if (tiles[i].tag != "none"
&& u < tiles.length
&& waterTiles[i].tag == "water"
&& waterTiles[u].y >= worldDim.top * X * 2) {
waterTiles[u].tag = "water";
waterTiles[i].tag = "none";
}
};
for (var i = 0; i < waterTiles.length; i++) {
if (waterTiles[i].tag == "water") {
worldWaterCount++;
} else {
waterTiles[i].tag = "none";
}
};
waterCheck();
console.log(waterComplete);
};
waterCheck 是我尝试比较数组的函数:
function waterCheck () {
for (var i = 0; i < waterTiles.length; i++) {
var check = Object.is(waterTiles[i].tag, waterTilesCheck[i].tag);
if (!check) {
waterComplete = false;
return;
}
};
waterComplete = true;
return;
};
Object.is 似乎是一个漂亮的技巧,但没有奏效,只是比较 waterTiles[i].tag == waterTilesCheck[i].tag 似乎也没有奏效,这让我感到困惑。所以现在我被困住并愿意接受建议......
完整代码:https://gist.github.com/TuckerFlynn/3d73d0d6d8e636743ff9
在浏览器中运行看看是什么游戏,水功能在 500 行左右
【问题讨论】:
-
什么是标签属性?字符串、数组、对象等
-
它是一个字符串,“water”或“none”
标签: javascript arrays object html5-canvas compare