2011-01-21 35 views
0

我有一個可以擴展Sprite的BuildingSprite。我嘗試將外部swf庫加載到我的主應用程序中。加載外部swf並將其分配給自定義類

我有這樣的代碼,它工作正常:

private function loadBuilding():void{ 
// this context is necessary to find the shared assets 
var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); 

// load in the asset swf 
var loader:Loader = new Loader(); 
var req:URLRequest = new URLRequest("assets/Tree.swf"); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onAssetsLoaded); 
    loader.load(req, context); 
} 


private function onAssetsLoaded(_event:Event):void{ 
// get a reference to the loaded library 
var loader:Loader = LoaderInfo(_event.target).loader; 
var library:* = loader.content; 
var assetClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("Tree") as Class; 
// create an instance of the shared asset 
var mySprite:Sprite = new assetClass();  
..... 
} 

我創建了一個新的類 - BuildingSprite擴展雪碧:

package 
{ 
import flash.display.Sprite; 

public class BuildingSprite extends Sprite 
{ 
    public function BuildingSprite() 
    { 
     super(); 
    } 
} 
} 

而且從上面的onAssetsLoaded,我更改代碼:

var mySprite:Sprite = new assetClass(); 

var mySprite:BuildingSprite = new assetClass(); 

我調試,並得到這個錯誤: 主線程(暫停:類型錯誤:錯誤#1034:類型強制失敗:無法 轉換樹@ c8f0301到BuildingSprite。)

我覺得這是一個類型轉換錯誤。 有沒有辦法加載外部swf庫並將其分配給自定義類?

回答

1

的這裏的問題是,Tree是擴展Sprite類已經「不能將樹@ c8f0301

BuildingSprite一類是另一個類擴展精靈。把它看作是一個樹,其中Sprite是樹幹,而類是樹枝,雖然它們都與它們原來的Sprite類相關,但它們並不認識對方。

你需要做的是展示他們是如何相關的。通過將Tree轉換爲Sprite並將Sprite分兩步轉換爲BuildingSprite。

var mySprite:BuildingSprite = (new assetClass() as Sprite) as BuildingSprite ;

如果你已經在你的樹類擴展了附加功能的Sprite類,你會失去這些功能或進入一些問題,但如果僅僅是要使用,這應該圖形做到這一點。


在一個側面說明,使用可用庫可以加快速度。所以,如果你得到一個機會,確實有擡頭的casalib,特別是(有關的話題)的contentAsMovieClipcreateClassByName功能swfLoad


編輯

貌似我應該有測試它更多。事實證明,如果你這樣做 var s:Sprite = (new assetClass() as Sprite),將其轉換s到任何類assetClass()的,而不是周圍的其他方式,因此,如果你做的s痕跡也不會是一個雪碧更多

我處理這個問題的方式是創建一個通用的精靈(實際上是CasaSprite),並添加一個var view:Sprite(或displayObject或MovieClip)作爲孩子。這可能不是你正在尋找的答案,但它的工作原理。

0

我試圖跟蹤代碼:

trace(new assetClass() as Sprite) 

而且它返回:

[object Tree] 

而且

trace((new assetClass() as Sprite) as BuildingSprite) 

但它返回:

null 

我創建了Tree.swf與庫中的樹符號,它

  • 啓用 「爲ActionScript導出」

  • 和 「基地班:的flash.display.MovieClip」

這裏有任何錯誤?

感謝您的指導。我正在創建一個使用等距庫的遊戲。而不是用png使用BitmapData加載每個建築物,我嘗試加載包含庫中所有建築物的外部庫swf。

我相信swf的文件大小會小於所有的png文件。我需要一個擴展Sprite/MovieClip的Building的自定義類,以便我可以擁有像Direction,Cost等自定義屬性。您是否有任何資源示例代碼可以下載以供參考?謝謝。

相關問題