2011-07-25 37 views
1

我在最近編程時遇到了死衚衕,而且我終於意識到所有破解的代碼都是因爲我不知道如何與另一個類的實例進行交互。這裏是什麼,我試圖做的要點:你如何與一個單獨的班級的所有實例交互?

 if(this.hitTestObject(targetClip)){ 
      trace("hit!"); 
      } 

的問題是,如果我解決一個實例,它是在畫布上,我得到「訪問未定義的屬性targetClip」,即使文檔類可以與它交互很好。如果我將targetClip的類文件作爲目標,則會得到「將類型爲Class的類的值強制轉換爲不相關的類型flash.display:DisplayObject」。這不僅僅是hitTest的一個問題,我在其他操作中遇到了這個問題,所以有一些基本的語法我沒有理解。請告訴我我缺少的東西。

回答

1

我對你的問題不是100%,但我會假設你要求的是從「Cla」的任何一個實例中調用hitTestObject的方法「ClassB」的所有實例的「ssA」權利?所以像有一個Bullet對象的東西檢查它是否碰到任何Player對象。

如果這確實是一個問題,那麼就沒有一個類的所有實例(我知道)的「全局列表」。但是,這並不能阻止你通過使用類的實例的靜態向量來自己做這件事。不過要注意,因爲這需要比平時多一點的清理代碼。這裏有一個使用子彈和玩家的簡單例子。

class Bullet extends Sprite //or w/e it is your objects extend 
{ 
    public Bullet() 
    { 
    } 

    public function checkCollisionsWithPlayers() : void 
    { 
     for(var i : int = 0; i < Player.AllPlayers.length; ++i) 
     { 
      var player : Player = Player.AllPlayers[i]; 
      if(this.hitTestObject(player)) 
      { 
       trace("hit!"); 
      } 
     } 
    } 
} 

class Player extends Sprite 
{ 
    static public const AllPlayers : Vector.<Player> = new Vector.<Player>(); 

    public Player() 
    { 
     AllPlayers.push(this); 
    } 

    //remove unused Players from the AllPlayers list 
    public function free() : void 
    { 
     var index : int = AllPlayers.indexOf(this); 
     if(index >= 0) 
     { 
      AllPlayers.splice(index, 1); 
     } 
    } 
} 

這使您可以創建所有玩家的列表。在Bullet的任何實例上調用checkCollisionsWithPlayers函數將檢查所有當前實例化的Player對象的命中。

但是,如果您不再通過調用free()函數來清除未使用的玩家,這會造成內存泄漏(因爲Vector會保留對不允許垃圾的實例的引用收集器清理記憶,不要提及它可能會對死亡玩家返回虛假命中)。如果您使用像這樣的模式來正確清理列表,請注意,因爲它非常容易出錯。

+0

非常感謝!這個代碼起初很笨拙,因爲我以前從未使用過載體,但這正是我所需要的,現在我可以在將來的課外參考實例。 –

0

你需要記住,單獨的類彼此不知道任何事情。要從不同的類(B類)訪問變量(例如A類),您需要在B類中創建一個'getter'方法:

getVariable(){return variable;}

和呼叫從類A該方法中,或者靜態地(B.getVariable())或動態(B BBB =新B(); bbb.getVariable();)附近顯式方向

類以訪問在其他類中保存的信息

+0

我知道變量不是全局變量,並且將它們從一個類別拉到另一個類別來獲取它們,但是我正在詢問類的孩子。你將如何去檢查對象A的一個實例是否在任何一個對象內觸摸了一個對象B的實例。文檔類可以輕鬆完成。爲了進行這樣的檢查,甚至必須「得到」什麼? –

+0

爲什麼不使用文檔類而不是一次運行N份代碼副本。 – 2011-07-25 02:49:27

+0

嘗試獲取實例。讓B的孩子成爲一個領域並從A訪問它,但那不是很好的代碼風格。 – ben

相關問題