我这里有一个代码,应该将阶段保存到文件中,但是当我单击运行在浏览器上具有此代码的函数的按钮时,它不起作用。询问保存位置的窗口未显示。
private function cropAndSave():void
{
var file:FileReference = new FileReference();
var bit:BitmapData = new BitmapData(bm.width, bm.height);
var jpgEncoder:JPGEncoder = new JPGEncoder(95);
var shiftOrigin:Matrix = new Matrix();
var now:Date = new Date();
var outputFileName:String = now.getTime()+"_scrapeenet";
outputFileName += ".jpg";
shiftOrigin.translate(-bm.x,-bm.y);
bit.draw(stage, shiftOrigin);
file.save(jpgEncoder.encode(bit),outputFileName);
}
在Flash Player上它可以工作。 如果我将“stage”更改为某个movieclip名称,它也可以工作。但我需要保存所有舞台,而不仅仅是一个动画片段。
这可能是一个错误。
有什么方法可以解决吗?
答案 0 :(得分:1)
AS3参考文档对flash.net.FileReference说:
FileReference.upload(),FileReference.download(),FileReference.load()和 FileReference.save()函数是非阻塞的。在文件传输完成之前,这些函数在调用后返回。此外,如果FileReference对象超出范围,则在离开作用域时,该对象上尚未完成的任何事务都将被取消。确保FileReference对象保持在范围内,只要上传,下载,加载或保存预计将继续。
看起来您的FileReference对象立即超出范围,可能会自动取消您的文件保存。此外,文档说明:
在Flash Player中,您只能成功调用此方法以响应用户事件(例如,在鼠标单击或按键事件的事件处理程序中)。否则,调用此方法会导致Flash Player抛出Error异常。
您的粘贴代码不会因MouseEvent或KeyboardEvent而显示此操作,因此目前尚不清楚您是否根据用户操作进行操作。