簡體   English   中英

AS3動態創建對象的實例

[英]AS3 Dynamically create an instance of an object

我有一個類,它包含以下方法將對象放在舞台上。

public function createBox()
{
    var box:Ball1 = new Ball1();
    addChild(box);
    box.addEventListener(Event.ENTER_FRAME, boxF);
}

我想要做的是將對象名稱傳遞給方法,然后加載該對象,從而允許我對不同的對象使用相同的方法。

一個非工作的例子:

public function createBox( obj )
{
    var box:obj = new obj();
    addChild(box);
    box.addEventListener(Event.ENTER_FRAME, boxF);
}

這可能嗎?

謝謝

現有答案的更敏捷版本是使用getDefinitionByName() ,它允許您基於輸入字符串構造類。

使用此函數,您可以將方法重寫為以下內容:

public function produce(className:String):*
{
    var type:Class = getDefinitionByName(className) as Class;
    return new type();
}


高級:

為了使這更嚴格和更易於維護(使得只有某些工廠可以創建某些類),您可以使用接口在給定工廠和它可以生成的類之間建立關系。 下面是一個小例子。

說一個工廠, EnemyFactory ,創建你認為是游戲中的敵人的物體。 我們不希望能夠創建拾取器,粒子和其他非敵人類型的對象。 我們可以創建一個IEnemyProduct接口,它由EnemyFactory允許創建的類實現。 界面可以簡單如下:

public interface IEnemyProduct{}

任何敵人的類都可以實施。 然后可以將EnemyFactoryproduce()函數修改為更易讀的版本,如下所示:

public function produce(enemyClassName:String):IEnemyProduct
{
    var type:Class = getDefinitionByName(enemyClassName) as Class;
    return new type() as IEnemyProduct;
}

在這種情況下,如果生成的類沒有實現IEnemyProduct ,則produce()將返回null 這里的目標是明確哪些工廠負責哪些對象,一旦項目變大,這是一個很大的優勢。 使用接口而不是基類也意味着您可以實現多個接口並使多個工廠生成類。

你可以使用一個簡單的工廠,或類似的東西:

  public class Factory
  {
      public static function produce(obj:String)
      {
          if (obj == "obj1")
          {
              return new obj1();
          } else if (obj == "obj2") {
              return new obj2();
          }
      }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM