2014-01-24 45 views
0

我的測試平臺能夠將1000個元素合成爲屏幕上的剪輯,但我無法從外部swf提取Starling或導出爲png 。難以從外部Flash SWF庫中的movieClip獲取位圖

(我有點代碼屠夫的,但都試過很多的變化,並通過spritesheet發生的例子已經看過))

我見過的建議:「你不能從一個類獲得的位圖數據只displayObjects(MClip,Sprite)「,我的行:s =新的AssetClass()似乎解決了這個問題。 Correct usage of addtoStage when loading external swf

我能夠產生一個內部矢量影片剪輯的位圖,並使用as3corelib.PNGEncoder.as其保存到.png文件,但我最終用夾子從外部SWF空白PNG,運行此在Flash Pro中CC ..

轉述代碼:

// SWF負載進行處理:

testBitmap = new Bitmap(new BitmapData(w, h , true, 0x0)); 

var AssetClass:Class = getDefinitionByName("assetNameFromDatabase") as Class; 
var s:MovieClip = new AssetClass(); // AddChild(s) functions properly 

var m:Matrix = new Matrix(1, 0, 0, 1, 400, 300); 

testBitmap.bitmapData.draw(s, m); 

// addChild(testBitmap); or send to PNGEncoder rsult is blank 


// internal clip test that does convert to bitmap 
var b:MovieClip = new testdMovieClip(); 
var m:Matrix = new Matrix(1, 0, 0, 1, 200, 300); 
testBitmap.bitmapData.draw(b, m); 

// ----------------- -----------

感謝Vesper,無法用你的建議修正一些事情,我實際上已經添加到一個movieClip中,只是將它從簡化的代碼示例中刪除,我嘗試了一些在繪製位圖之前添加實例的變量,仍然得到沒有結果。

// -

***修訂:看起來像庫已嵌入「顯示,但不復制」保護代碼?有人可以驗證這一點。

我正在使用以swf格式提供的合併的影片剪輯庫(我有個別fla源文件庫swfs中的數百個資源,我希望避免處理,它們從Flash Pro cc中刪除swf導入是進一步的agrrevation )這是退役遊戲的公共領域資料。

使用Trillix審判,我檢查了嵌入式類文件,與通常的個人資產類別沿着他們有這樣的代碼:

public override function get movieClipData():flash.utils.ByteArray 
{ 
    if (bytes == null) 
    { 
    bytes = flash.utils.ByteArray(new dataClass()); 
    } 
    return bytes; 
} 


{ 
    bytes = null; 
} 

internal static var bytes:flash.utils.ByteArray=null; 

// the classes also have 
import flash.utils.*; 
import mx.core.*;  // as well as embedded package mx files, is that for Flex? 

我一直在尋找創造一些代碼較少的外部庫文件的空氣/ iOS下,我可能不得不學習如何自動合併FLA的時間早於後期。

回答

0

我已經看到形狀/精靈對象的寬度和高度屬性奇怪的行爲,而他們沒有被添加到顯示列表,他們返回-100萬或東西。所以你應該添加,然後繪製,然後刪除。這個技巧幫助我編寫了一個動態生成的精靈。

testBitmap = new Bitmap(new BitmapData(w, h , true, 0x0)); 
var AssetClass:Class = getDefinitionByName("assetNameFromDatabase") as Class; 
var s:MovieClip = new AssetClass(); // AddChild(s) functions properly 
addChild(s); // ! 
var m:Matrix = new Matrix(1, 0, 0, 1, 400, 300); 
testBitmap.bitmapData.draw(s, m); 
removeChild(s); 
addChild(testBitmap); // now should display properly 
相關問題