任何人都可以帮我一个简单的网格制作算法,具有以下要求:
谢谢:)
编辑:哇...在看完第一个回复后......我想我会尝试对我的帖子做更具体的了解。
我试过的是:
boxList是一个包含所有框的数组......
for (var i:int = 0; i < boxList.length; i++)
{
var b:Box = new Box(boxList[i]);
this.addChild(b);
b.y = 5 + (i % 2) * (b.height + 10);
b.x = 10 + int(i / 2) * (b.width + 5);
}
但是只有当盒子的宽度相同时才能使用这个...在我的情况下,宽度是不同的......所以怎么做????
答案 0 :(得分:1)
你知道舞台的宽度,以及每个盒子的宽度。
简单地有一个变量跟踪当前的水平限制。
即一些伪代码:
lastX=0
for(box in boxes)
if(lastX + box[i].width > width)
lastX = box[i].width
add box to next row, with x = 0
else
add box at lastX
lastX += box[i].width
答案 1 :(得分:1)
这可能取决于您希望如何完成此操作的其他一些细节。例如,您是否希望两行尽可能接近相同的宽度?你想在每一行上有相同数量的盒子吗?当有一个奇数时,你可能想要在其中一行上加一个额外的盒子吗?等
按照您的代码,看起来您正试图在每一行上获得偶数个框。重要的是,如果你从左到右平铺,将始终采取你刚放在那一行的最后一个框,将它的x属性和宽度属性加在一起(给你右边的位置),然后只是加10。
所以使用原始代码,也许这样的东西会起作用:
var bLast1:Box; // added
var bLast2:Box; // added
for (var i:int = 0; i < boxList.length; i++)
{
var b:Box = new Box(boxList[i]);
this.addChild(b);
b.y = 5 + (i % 2) * (b.height + 10);
if (i % 2 == 0) // is this the first row?
{
b.x = bLast1 ? bLast1.x + bLast1.width + 10 : 10;
bLast1 = b;
}
else
{
b.x = bLast2 ? bLast2.x + bLast2.width + 10 : 10;
bLast2 = b;
}
}
同样,您可能需要做出更多关于您希望如何完成平铺的决定。