【问题标题】:AS3: How do I automate declaring multiple objectsAS3:如何自动声明多个对象
【发布时间】:2012-07-27 02:33:51
【问题描述】:

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

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

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

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

现在我需要做的是让它为我声明具有唯一名称的对象,然后用起始数据填充它们。这些对象需要可以从代码的其他部分访问(我试图将它们声明为 public var gridPosTile[h] : Object = new Object; 但将其声明为“公共”它给了我一个错误说它“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++;


            }
        }
    }

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    您没有发布完整的课程,所以我无法告诉您为什么会出现 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)
    
                }
            }
          }
        }
      }
    

    【讨论】:

    • 另外我会为 gridPosTile 创建一个自定义类,它包含所有属性,因为这将为您提供对该对象的可靠引用和一个可以进行更改的集中类。
    • 嗨,谢谢,我要试一试 :) ArrayCollection 似乎没有被识别?据我所知,这是 FLEX 框架 framework.swc 的一部分,显然我可以将其复制到我的项目文件夹并包含,但我不知道在哪里可以找到该文件以便复制它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2020-09-14
    • 2023-03-31
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    相关资源
    最近更新 更多