这是我创建的一段基本代码,它生成一个随机的双色级别:
var map:Array = new Array();
var mLength:int = 28;
var mHeight:int = 16;
var mArea:int = mLength * mHeight;
var tileWidth:int = 20;
var tileHeight:int = 20;
var tileX:int = 0 - tileWidth;
var tileY:int = 0;
var genTile:int;
var genDone:Boolean = false;
var waterChance:int = 10;
var grassChance:int = 33;
var tile:Sprite = new Sprite();
var waterTile:Sprite = new Sprite();
var waterHolder:Sprite = new Sprite();
var genericTileHolder:Sprite = new Sprite();
var hitting:Boolean = false;
var i:int = 0;
for (i = 0; i < mArea; i++) {
if (map[i - 27] == 1) {
waterChance * 8;
grassChance / 2;
}
if (map[i - 28] == 1) {
waterChance * 8;
grassChance / 2;
}
if (map[i - 29] == 1) {
waterChance * 8;
grassChance / 2;
}
if (map[i - 1] == 1) {
waterChance * 8;
grassChance / 2;
}
tileX += tileWidth;
if (tileX >= mLength * tileWidth) {
tileX = 0;
tileY += tileHeight;
}
genTile = (Math.round((Math.random()*(waterChance+grassChance))));
if (0 < genTile < waterChance) {
waterTile.graphics.beginFill(0x0033CC);
waterTile.graphics.drawRect(tileX,tileY,tileWidth,tileHeight);
waterHolder.addChildAt(waterTile, 0);
map.push("1");
}
if ((waterChance + 1) < genTile && genTile < (waterChance + grassChance)) {
tile.graphics.beginFill(0x216B18);
tile.graphics.drawRect(tileX,tileY,tileWidth,tileHeight);
genericTileHolder.addChildAt(tile, 0);
map.push("2");
}
grassChance = 33;
waterChance = 10;
}
stage.addChildAt(waterHolder, 0);
stage.addChildAt(genericTileHolder, 1);
问题是双重的。一,每当数组生成时,长度似乎都有一个随机的变化位 - 使用trace(map.length)我得到了很多不同的长度,从750到780,最多只有400。 其次,每当我跟踪关卡本身时,使用trace(map)我发现第一个元素似乎默认设置为1.我无法弄清楚它为什么这样做,因为它应该在20之后至少一次2尝试。
所以,如果有人能帮助解决这些问题,我将非常感激。感谢。
答案 0 :(得分:1)
您无法比较动作中的两个以上项目:
if (0 < genTile < waterChance) {...
它总会返回true(我认为)。代替:
if ((0 < genTile) && (genTile < waterChance)) {...
此外,看起来每个循环都可以执行map.push(“1”)和map.push(“2”) - 因此map大于mArea - 我认为它应该做一个或另一个?
答案 1 :(得分:0)
问题2:默认情况下,地图的第一个元素为1
if (0 < genTile < waterChance)
{
waterTile.graphics.beginFill (0x0033CC); // Blue
waterTile.graphics.drawRect (tileX,tileY,tileWidth,tileHeight);
waterHolder.addChildAt (waterTile, 0);
map.push ("1");
}
由于<
运算符是左关联的,因此表达式将被计算为(0 < genTile) < waterChance
。
由于genTile永远不会小于0,(0 < genTile)
始终为假。
由于waterChance也永远不会少于0,(false < waterChance)
(0 < waterChance)
的始终为真。
这使(0 < genTile) < waterChance
始终为真。
因此,地图的第一个元素始终为“1”。
问题1:map.length变化
if ((waterChance + 1) < genTile && genTile < (waterChance + grassChance))
{
tile.graphics.beginFill (0x216B18); // Green
tile.graphics.drawRect (tileX,tileY,tileWidth,tileHeight);
genericTileHolder.addChildAt (tile, 0);
map.push ("2");
}
由于mArea等于448,水瓦总是总计448。
由于genTile是一个随机数,因此草地砖总是一个随机数。
因此map.length会有所不同。
我希望有所帮助。