如何对齐"盒子"在网格布局中

时间:2015-05-08 14:45:49

标签: xml actionscript-3 menu grid-layout

我这个小菜单"我在我的.swf

中通过XML加载

这是我的代码:

for each(var datos: XML in xml.datos) {


    var menuItem: MenuItem = new MenuItem();
    menuItem.x = count * menuItem.height * 6;
    menuItem.y = 0;
    menuItem.menuText.text = datos.@causa;
    menuItem.mouseChildren = false;
    menuItem.addEventListener(MouseEvent.MOUSE_OVER, mouseOverItem);
    menuItem.addEventListener(MouseEvent.MOUSE_OUT, mouseOutItem);
    menuItem.addEventListener(MouseEvent.CLICK, itemClicked);
    menuHolder.addChild(menuItem);
    count++;
}

这将把每个"菜单"彼此相邻(从左到右)。

我们只是说我加载30"盒子"而我需要的是向他们展示:

enter image description here

1 个答案:

答案 0 :(得分:2)

这样的事情应该有效。基本上,每当count得到5时,它就会重置。由于您的x值基于count,因此它也会重置并从左侧重新开始。此外,您的yPos将增加一些值(例如我选择了50),下一行将被该数量抵消。

var yPos: Number = 0;
for each(var datos: XML in xml.datos) {
    var menuItem: MenuItem = new MenuItem();
    menuItem.x = count * menuItem.height * 6;
    menuItem.y = yPos;
    menuItem.menuText.text = datos.@causa;
    menuItem.mouseChildren = false;
    menuItem.addEventListener(MouseEvent.MOUSE_OVER, mouseOverItem);
    menuItem.addEventListener(MouseEvent.MOUSE_OUT, mouseOutItem);
    menuItem.addEventListener(MouseEvent.CLICK, itemClicked);
    menuHolder.addChild(menuItem);
    count++;
    if (count % 5 == 0) {
        count = 0;
        yPos += 50;
    }
}

你也可以在没有条件和yPos var。

的情况下完成

根据@DodgerThud的建议,我根据你的目标做了一些更合理的数学。

var margin: Number = 5;
var numPerRow: Number = 4;
for each(var datos: XML in xml.datos) {
    var menuItem: MenuItem = new MenuItem();
    menuItem.x = (count % numPerRow) * (menuItem.width + margin);
    menuItem.y = Math.floor(count / numPerRow) * (menuItem.height + margin);
    menuItem.menuText.text = datos.@causa;
    menuItem.mouseChildren = false;
    menuItem.addEventListener(MouseEvent.MOUSE_OVER, mouseOverItem);
    menuItem.addEventListener(MouseEvent.MOUSE_OUT, mouseOutItem);
    menuItem.addEventListener(MouseEvent.CLICK, itemClicked);
    menuHolder.addChild(menuItem);
    count++;
}