2013-07-26 39 views
0

我对AS3相当新。试图弄清楚这一点,我一直在绞尽脑汁。我有一个网格系统布局。每个网格块的实例row1,row2等问题添加子网格系统

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

在这个块中,最后添加了row.addChild(item);是不是有办法让行+我,所以它会自动命名该行并添加到它的孩子?这两本书我都没有提到它,尽管它们使用某种[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; 

回答

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]访问行。

+0

Et,si les rows sont des elementsdéjàexistants etprésentsur ta timeline,tu peux simplement utiliser lemêmesystèmede remplissage de mcs,et retirer lacréationdes rows:var rows:Array = [row1,row2,row3。 ..] – Aralicia

+0

我感谢你的回应,但它不起作用。我不认为我可以做我想做的事情。每行不是一行,而是屏幕上已经有一个块。它们被命名为row1,row2等。我试图通过使用for循环来添加项目到每个块中。我认为我可以使用数组,然后将项目子项添加到每个块中,但这不起作用。 我想要像行[i] .addChild(item),但显然是错误的。无论如何谢谢你Baris! – micker

+0

我来自PHP编程。我希望有一个回声命令LOL​​! – micker

0

如果要解决计算名称的组件,请使用this[computedName]方法。但是,请确保您不会以null或undefined结尾查询,如果您错误地命名组件,就会发生这种情况。巴里斯的改变代码:

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); 
} 

巴里斯有有一些技巧供您学习和掌握太像创建类数组的形式随机从中选择。