2012-12-26 24 views
0

我正在用AS3,Flixel和組件/實體系統(是的,所有在同一時間)和我的實體(它是FlxSprite的子類)沒有被正確添加(即根本沒有)。我花了兩個小時才找到了違規線路。如果我刪除它,遊戲的其餘部分就會愉快地出現。AS3對象索引導致Flixel不當行爲 - 此代碼有什麼問題?

這段代碼有什麼問題?

public function addComponent(c:Component):void          
{                      
    var type:String = Object(c).constructor.toString();         
    FlxG.log("type=" + type);               
    this._components[type] = c; // The evil line          
    FlxG.log("now type=" + _components[type]);           
    c.setData(this);                 
}                      

components是作爲地圖/字典使用的對象字段。 type設置爲[class PlayerComponent]。基於谷歌搜索,這是有效的,應該按預期工作。

基於控制檯的輸出,它只是在該行後面保存 - 而不是完全崩潰。這是怎麼回事?更多的細節很高興根據要求提供。

+1

請確保您使用的是調試Flash播放器。沒有它,異常(崩潰)會默默地發生。 –

+0

這是我第一次看到這種方式來獲取對象的類名(我的意思是constructor.toString()方法)。我更喜歡使用類(getDefinitionByName(getQualifiedClassName(obj))); – yannicuLar

回答

0

我不能確定Component - 不是我的專長 - 但我知道,FlxGroup及其子女(包括FlxState)有一個名爲add()方法,增加了孩子們給他們。

所以,如果你有一個FlxSprite,正確的方法(在flixel中)將其添加到更新/繪製的東西鏈是使用它;您可以將其直接添加到您的州或該州的一個小組。

函數文檔:http://flixel.org/docs/org/flixel/FlxGroup.html#add()

+0

我應該指出這是一些有用的信息,但可能對您所遇到的問題沒有幫助,而這種副作用並不強烈地抓住「組件」。 –