【发布时间】:2011-04-24 05:06:05
【问题描述】:
使用 Embed 标签,我们不仅可以在 swf 文件中嵌入 swf 或 jpg 等,还可以嵌入不支持的文件格式,例如:
Embed[(source="mzip.zip", mimeType="application/octet-stream")]
公共静态 MyZip:Class;
当我实例化这样一个类时,我会得到什么类型的对象?是否可以从此类中获取 ByteArray?
当我这样做时:
package {
import flash.utils.ByteArray;
public final class Resource {
[Embed(source="p2.zip", mimeType="application/octet-stream")]
public static const MyZip:Class;
public static function getByteArrayFromZip():ByteArray {
var zip:ByteArray = new MyZip as ByteArray;
return zip;
}
}
}
和
public class Main extends Sprite {
private var ship:Bitmap;
private var lib:FZipLibrary;
public function Main() {
lib = new FZipLibrary();
lib.formatAsBitmapData(".jpg");
lib.addEventListener(Event.COMPLETE,onCompleteHandler);
var fzip:FZip = new FZip();
fzip.loadBytes(Resource.getByteArrayFromZip());
lib.addZip(fzip);
}
private function onCompleteHandler(evt:Event) {
var image:BitmapData = lib.getBitmapData("assets/graphics/scratchers/myimg.jpg");
trace("Size: " + image.width + "x" + image.height);
var sa0img0:Bitmap = new Bitmap(image);
addChild(sa0img0);
}
}
}
我收到以下错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Main/onCompleteHandler()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at deng.fzip::FZipLibrary/processNext()
at deng.fzip::FZipLibrary/loaderCompleteHandler()
【问题讨论】:
-
如果您不使用“as”强制转换(X as ByteArray)而是使用普通的显式强制转换,您将立即收到错误消息。所以你应该写“ByteArray(X)”而不是“X as ByteArray”。如果转换失败,它不会将结果转换为 null。
-
此外,您的错误发生在 onCompleteHandler 中,那么这里的 null 是什么?也许可以使用调试器逐步完成。
标签: actionscript-3 flex4 flash-cs4