将子项添加到网格系统的问题

时间:2013-07-26 08:24:49

标签: actionscript-3 flash for-loop grid

我是AS3的新手。我一直在试图解决这个问题。我有一个网格系统。每个网格块都是实例化的row1,row2等

我有一些代码重复使用for添加子项(var i:int = 0; i< 81; i ++)。

在最后的块中,它添加了row.addChild(item);是不是有办法使行+ i所以它会自动命名该行并将子项添加到其中?我甚至都没有提到这两本书,尽管他们使用某种[i]或(i)作为其他东西。

任何帮助都会得到真正的赞赏,因为我已经坚持了几天这个问题,而我的互联网搜索只是不适合这个问题。

这是我的代码:

for (var i:int = 0; i < 81; i++) {
        var item:MovieClip = new MovieClip();
        //item.fnumber = i;
        item.ftype = Math.round(Math.random() * 5 + 1); 


                        if (item.ftype == 1) {
                        var item:MovieClip = new item(); item.fnumber = i; item.fcolor = ""; item.ftype = 1}
                        if (item.ftype == 2) {
                        var item:MovieClip = new item2(); item.fnumber = i; item.fcolor = ""; item.ftype = 2}
                        if (item.ftype == 3) {
                        var item:MovieClip = new item3(); item.fnumber = i; item.fcolor = ""; item.ftype = 3}
                        if (item.ftype == 4) {
                        var item:MovieClip = new item4(); item.fnumber = i; item.fcolor = ""; item.ftype = 4}
                        if (item.ftype == 5) {
                        var item:MovieClip = new item5(); item.fnumber = i; item.fcolor = ""; item.ftype = 5}
                        if (item.ftype == 6) {
                        var item:MovieClip = new item6(); item.fnumber = i; item.fcolor = ""; item.ftype = 6}



                    row.addChild(item);
                    item.flevel = 1;

2 个答案:

答案 0 :(得分:0)

var rows:Array = [];
var mcs:Array = [item, item2, item3, item4, item5, item6];

for(var n:int = 0; n<10; n++) {
    var row:Sprite = new Sprite();
    for (var i:int = 0; i < 81; i++) {

        var ftype = Math.round(Math.random() * 5 + 1); 
        var item:MovieClip = new mcs[ftype]();
        item.fnumber = i;
        item.fcolor = "";
        item.ftype = ftype;
        item.flevel = 1;

        row.addChild(item);

    }
    addChild(row);
    rows.push(row);
 }

现在,您可以使用rows[i]访问行。

答案 1 :(得分:0)

如果要处理计算名称的组件,请使用this[computedName]方法。但是,请确保您不会以null或未定义的方式查询,如果您错误地命名了组件,就会发生这种情况。改变Baris的代码:

var rows:Array = [];
var mcs:Array = [item, item2, item3, item4, item5, item6];

for(var n:int = 1; n<10; n++) {
    var row:MovieClip=this["row"+n]; // <-- this is the trick
    for (var i:int = 0; i < 81; i++) {

        var ftype = Math.round(Math.random() * 5 + 1); 
        var item:MovieClip = new mcs[ftype]();
        item.fnumber = i;
        item.fcolor = "";
        item.ftype = ftype;
        item.flevel = 1;

        row.addChild(item);

    }
    // addChild(row); this is not needed, as you have your rows already on screen
    rows.push(row);
 }

Baris有一些技巧可供你学习和掌握,比如创建一个随机选择的类数组。