模数/网格布局,尺寸变化的项目

时间:2011-03-03 16:59:57

标签: actionscript-3 dynamic grid modulus

我正在尝试用一种优雅的方式在网格中显示一定数量的项目。我觉得答案部分取决于模数,但它比那复杂一点。我知道如何根据设定的列数在网格中布置项目。像这样:

for (var j=0;j<numFiles;j++){
clip.x = clip.width * (j % cols);
clip.y = clip.width * int(j / cols);
}

但我想做的是设置如果只有一个项目(j = 0),图像覆盖整个可用区域(stage.Width和stage.Height,或者,为简单起见,1000px,和500像素)。如果有2个项目,则应该有2列,图像占据舞台宽度的一半,所有高度(500x500),3个项目--3列(300x500),4个项目 - 2列和1个。 2行(500x250),依此类推,保持平衡的网格布局,但减少项目的尺寸,并以某种逻辑和平衡的方式增加行数。

必须有一种方法可以用数学的方法做到这一点,但我没有遇到它,似乎无法自己掌握它。如果有人有想法,我很乐意听到。我在Flash AS3中这样做,但任何一个例子都很有用。

1 个答案:

答案 0 :(得分:2)

这是一个棘手的问题:)

@ThatSteveGuy是对的;某些文件计数可能无法正常工作。

解决此问题的一种方法是使用treemap mansonry 算法。

此处提供了树形图的实现:http://www.arpitonline.com/blog/downloads/treemap2/srcview/article

不幸的是,它与displayList强烈耦合,有些事情有点奇怪,(比如在具有各种偏移的多个displayObjects中渲染多个rects)但是它完成了这项工作:)

这里有一个关于mansonry的代码胚胎:Programmatic Masonry / Space-FInding Layout in Actionscript