我已经获得了这个拼图代码,用于加载图像,用户将这些拼图放在一起以形成图像。
在我的桌面计算机上运行完美(Adobe Animate上的AIR 25.0),但在尝试使用我的Android设备时,图像似乎无法加载(是的,我确实将它附加到我的项目中)
这是我的代码:
//load picture and set up sprites
function startJigsawPuzzle() {
// load the bitmap
loadBitmap("jigsawimage.jpg");
// set up two sprites
otherPieces = new Sprite();
selectedPieces = new Sprite();
addChild(otherPieces);
addChild(selectedPieces); // selected on top
}
// get the bitmap from an external source
function loadBitmap(bitmapFile:String) {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingDone);
var request:URLRequest = new URLRequest(bitmapFile);
loader.load(request);
}
// bitmap done loading, cut into pieces
function loadingDone(event:Event):void {
// create new image to hold loaded bitmap
var image:Bitmap = Bitmap(event.target.loader.content);
pieceWidth = Math.floor((image.width/numPiecesHoriz)/10)*10;
pieceHeight = Math.floor((image.height/numPiecesVert)/10)*10;
// place loaded bitmap in image
var bitmapData:BitmapData = image.bitmapData;
// cut into puzzle pieces
makePuzzlePieces(bitmapData);
您认为可能是什么问题?
感谢您的帮助
答案 0 :(得分:0)
首先,无论何时在AS3中使用异步加载器,都应该监听错误以及Event.COMPLETE
事件。拥有这些错误监听器可能会提醒您注意这个问题。
这看起来像这样:
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
当找不到文件时会触发IO错误事件,安全错误意味着不允许加载文件。还有其他一些你可以听的事件,但这些是你会遇到的主要事件。
很可能,您在移动设备上获得了IO_Error
。这是因为移动设备上根应用程序目录的路径需要以app:/
开头。这是一个内置的快捷方式,可以访问您的应用程序目录,无论平台如何(因为不同的操作系统在不同的地方/沙箱中运行您的应用程序)。
因此,我建议您将代码更改为:
function loadBitmap(bitmapFile:String) {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingDone);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
var request:URLRequest = new URLRequest("app:/" + bitmapFile);
loader.load(request);
}
function ioErrorHandler(event:IO_ErrorEvent):void {
trace(event); //log or somehow show this error
}
function securityErrorHandler(event:SecurityErrorEvent):void {
trace(event): //log or somehow show this error
}
顺便说一下,我还建议在你的loader对象上删除那些监听器,因为只要它仍然在监听这些事件,它们就会将对象及其所有引用保留在内存中。
function disposeBitmapLoader(event:Event):void {
event.currentTarget.removeEventListener(Event.COMPLETE, loadingDone);
event.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
event.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
然后在所有事件处理程序中调用该函数,传入事件对象:
function loadingDone(event:Event):void {
disposeBitmapLoader(event);
//....rest of code
答案 1 :(得分:0)
如果你只有一张图片并且你总是在使用它,那么考虑使用[Embed]标签直接将它嵌入到swf中:
[Embed(source="jigsawimage.jpg")]
public static var ImageClass:Class;
var myBitmap:Bitmap = new ImageClass() as Bitmap;
var myBitmapData:BitmapData = myBitmap.bitmapData;