在外部闪存SWF库中的MovieClips获取位图



我的测试台能够将一千个元素复合到屏幕上的剪辑中,但是我不能从外部SWF上即时提取刻薄的位图或导出到PNG。<</

(我有点像代码屠夫,但尝试了很多变化,并浏览了SpriteSheet生成示例))

我已经看到了"您无法从类别的displayObjects(mclip,sprite)&quot&quot&quot&quot&quot&quot&quot",我的行:s = s = new AssetClass()似乎解决了这一点。加载外部SWF

时,请更正使用addostage

我能够生成一个内部矢量movieClip的位图,并使用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,您的建议无法gfix,我实际上已经添加到MovieClip中,只是将其排除在简化的代码示例之外,我确实尝试了一些在绘图之前添加一个实例的变体,没有结果。

// -

***修正案:看起来Libs已嵌入"显示",但不要复制"保护代码?有人可以验证这一点。

我正在使用以SWF格式提供的合并MovieClip库(我有单独的FLA来源,用于我希望避免处理的库中数百个资源,他们从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?

我正在考虑为Air/iOS创建一些无代码的外部库文件,我可能必须学会更早地自动合并FLA的方法。

我已经看到了形状/精灵对象的宽度和高度属性的怪异行为,而它们未添加到显示列表中,它们返回-1亿亿。因此,您应该添加,然后绘制,然后删除。当我写一个动态生成的精灵时,这个技巧对我有帮助。

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

最新更新