我的测试平台能够将一千个元素合成到屏幕上的剪辑中,但是我无法动态地从外部swf中为Starling提取位图或导出到png。
(我是一个代码屠夫,但尝试了很多变化,并通过spritesheet生成示例))
我已经看到了建议“你不能从一个只有displayObjects(MClip,Sprite)的类中获取bitmapData”,我的行:s = new AssetClass()似乎解决了这个问题。 Correct usage of addtoStage when loading external swf
我能够生成内部矢量movieclip的位图,并使用as3corelib.PNGEncoder.as将其保存到.png,但我最终使用外部swf中的剪辑进行空白png,在Flash Pro中运行CC ..
释义代码:
// swf load done handler:
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,只是将它从简化的代码示例中删除,我确实尝试了一些在绘制到位图之前添加实例的变量,仍然没有结果。
// -
***修正案:看起来libs嵌入了“显示但不复制”保护代码?有人可以验证这一点。
我正在使用以swf格式提供的合并movieclip库(我有单独的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?
我正在考虑为Air / iOS创建一些无代码的外部库文件,我可能需要学习如何尽快自动合并FLA。
答案 0 :(得分: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