如何在Flex4中嵌入纯AS3位图资源(在Flex3中有效)

3
在Flex3中,我可以编译纯AS3代码并使用“embed”标签加载图片。这是通过Flex创建一个BitmapAsset类来实现的。
在Flex4中,我仍然可以这样做。
然而,在Flex3中有一个技巧,可以欺骗Flex3并使用自己的mx.core.BitmapAsset类来去除一些多余的东西。这在这里描述:http://www.ultrashock.com/forums/flex/embed-flex-assets-without-using-flex-123405.html 不幸的是,我无法使用这些技巧与Flex4一起使用并获得更小的文件大小。我最终遇到错误“VerifyError:Error#1014:找不到类mx.core :: BitmapAsset”。
这个错误导致我来到这个论坛,并找到了这里描述的解决方案:http://tech.groups.yahoo.com/group/flexcoders/message/148762 按照这个建议,我添加了-static-link-runtime-shared-libraries=true,我的swf没有出现错误...但这意味着我正在加载我想要省略的flex框架的部分(文件大小也是如此)。
有没有更好的方法来欺骗Flex4在使用Embed时呢?
2个回答

3
这个东西会起作用吗?
[Embed(source="yourImage.jpg")]
private var ImageC:Class;
private var image = new ImageC();

Keith Peters有一篇关于这个主题的不错的文章


另外,这是一个ActionScript还是Flex项目?也许对于Flex项目,默认使用BitmapAsset。 - George Profenza
是的,这就是在使用Flex提供的命令行工具编译as3项目时嵌入资源的技术。以这种方式嵌入的资源需要一些来自Flex框架的类。我帖子中的第一个链接揭示了一种技术,可以裁剪这些类的大小,从而产生较小的SWF文件。使用Flex4嵌入资源导致SWF文件略微变大,而第一个链接中的旧技术不再适用。 - jedierikb
1
@jdierkb 我想知道Joa Ebert的Reducer是否适用于flex4生成的swf文件(http://blog.joa-ebert.com/2009/08/08/reducer/)。应该类似于在终端/命令提示符中使用java -jar reducer.jar -input old.swf -output new.swf。您需要java 1.6,所以在PC上应该没问题,但在osx上,您需要苹果的java更新,并且将路径导出到~/.bash_profile(export PATH=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands:$PATH)可能会很方便。如果这样可以解决文件大小的问题,但不能解决mx.*问题。 - George Profenza
不太喜欢类型错误 - 只是提醒一下,图像类型会变成位图。 - JTtheGeek

1

我在Flex 4中使用[Embed]和虚假的BitmapAsset.as创建了一个测试项目,但无法看到异常:

package
{
import flash.display.Sprite;
public class EmbedTest extends Sprite
{
    public function EmbedTest()
    {
        addChild(new smile());
    }

    [Embed("smile.png")]
    private var smile:Class;
}
}

尝试添加-link-report link-report.xml编译器选项,并检查bin-debug中的link-report.xml文件。

你有BitmapAsset.as吗?如果没有,可能是通过externsexternal-library-pathload-externs排除了它。


感谢您今天重新回到这个问题,几个月后。我在各种项目中使用了一个假的mx swc,但是由于未知原因,在使用flex4编译并在flex4项目中使用时无法正常工作。我将文件移动到不同的项目中,一切都正常工作了。感谢您对此进行了合理性检查。非常感谢。 - jedierikb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接