AS3:如何自动声明多个对象

时间:2012-07-27 02:33:52

标签: actionscript-3

我正在尝试自动初始化和填充多个对象及其相关属性。

基本上我有一个32x32网格,对于网格上的每个位置,我想分配一个具有多个属性的对象,可以在以后引用。

32x32网格上有1024个位置,我真的不想手动编写那么多变量声明。我将数组设置在一个单独的类文件中,该文件允许我将一个变量分配给网格位置: gridPos.put(x,y,object.property);

我还设置了一对for循环,它们将使用默认的起始数据填充对象。

现在我需要做的是让它为我声明具有唯一名称的对象,然后用起始数据填充它们。这些对象需要可以从代码的其他部分访问(我试图将它们声明为公共var gridPosTile [h]:Object = new Object; 但是将其声明为'public'它给了我一个错误说出“1114:公共属性只能在包内使用。”

*另外,我知道[h]是不对的,但有点像我看到它在我的头脑中工作...请照亮我:)

非常感谢

    public function gridPosTilePopulate():void
    {

        var g: int = 40;
        var h: int = 1;

        for(var i:int = 0; i < 32; i++)
        {
            var v: int = 40;

            g += 40;

            for(var q:int = 0; q < 32; q++)
            {
                var gridPosTile[h] : Object = new Object;

                gridPos.put(i, q, gridPosTile[h]);

                gridPosTile[h].xPos = (v + 40));
                gridPosTile[h].yPos = (g + 40));
                gridPosTile[h].p1Set = false);
                gridPosTile[h].p2Set = false);
                gridPosTile[h].m1Set = false);
                gridPosTile[h].m2Set = false);
                gridPosTile[h].m3Set = false);
                gridPosTile[h].m4Set = false);
                gridPosTile[h].coinSet = false);
                gridPosTile[h].powerupSet = false);

                v += 40;
                h++;


            }
        }
    }

1 个答案:

答案 0 :(得分:0)

你没有发布全班,所以我不能告诉你为什么你得到了1114错误 我将首先在您的类中添加一个属性来存储gridPosTitle对象。 您应该使用数组集合或向量。在我的例子中,我将使用arrayCollection 此存储集合可让您轻松参考您创建的所有图块 要添加动态名称属性,您只需使用括号表示法 最后删除对“h”的所有引用,因为除了命名对象之外不需要它。

package com.example{
    public class SomeClassName{

      // storage var for future use.
      public var tileStorage:ArrayColelction
      public function gridPosTilePopulate():void
      {
        tileStorage = new ArrayCollection()

        var g: int = 40;
        var h: int = 1;

        for(var i:int = 0; i < 32; i++)
        {
            var v: int = 40;

            g += 40;

            for(var q:int = 0; q < 32; q++)
            {
                var gridPosTile : Object = new Object;

                gridPos.put(i, q, gridPosTile);

                gridPosTile.xPos = (v + 40));
                gridPosTile.yPos = (g + 40));
                gridPosTile.p1Set = false);
                gridPosTile.p2Set = false);
                gridPosTile.m1Set = false);
                gridPosTile.m2Set = false);
                gridPosTile.m3Set = false);
                gridPosTile.m4Set = false);
                gridPosTile.coinSet = false);
                gridPosTile.powerupSet = false);

                v += 40;
                h++;
                // here we add the name property
                // try to never use keywords on dynamic classes since sometimes they may already be used
                gridPosTile.myName = "tile_" + h;
                tileStorage.additem(gridPosTile)

            }
        }
      }
    }
  }