这里有问题。
我的应用程序在我的计算机上工作正常,无论是离线还是在线(闪存上传到我们的网络服务器)。它在IE和Firefox中都可以正常工作。
然而,有些用户确实在IE中运行它有问题,而Firefox仍然没问题。
应用程序本身有效,尝试将某些帧缓冲到BitmapData时会出现错误。
所以,在Firefox中,它运行得很好。 在IE(在我的电脑上)它很棒。 在IE(在其他计算机上)它不起作用,并抛出此错误。它发生在最后,这意味着它一直正常,直到最后一次运行该函数。 (它是这样运行以允许更新进度条。如果我将for循环设置为180然后它全部冻结直到完成。这就是为什么我做10和10。)
任何有关这方面的帮助都会很棒,因为我完全被困在这里...... 我已经跟踪了bitmapdata的大小,并且在出现错误时它是1920x1080,这应该是它应该是的。
这是失败的代码:
fpsoSWFBuffer = new BitmapData(fpsoMC.width, fpsoMC.height, false, 0x00ff0000);
这是代码所在的整个函数:
public function bufferFpsoImages(evt:TimerEvent):void{
for (var i:int = 0; i<10; i++){
fpsoMC.gotoAndStop(currentFpsoFrame);
fpsoSWFBuffer = new BitmapData(fpsoMC.width, fpsoMC.height, false, 0x00ff0000);
fpsoSWFBuffer.draw(fpsoMC);
fpsoImgArray[currentFpsoFrame] = fpsoSWFBuffer;
currentFpsoFrame++;
}
if (currentFpsoFrame <= (totImg360-10)){
// Still buffering frames //
myLoadingPanel.setBufferProg(currentFpsoFrame);
var fpsoTimer:Timer = new Timer(1,1);
fpsoTimer.addEventListener(TimerEvent.TIMER_COMPLETE, bufferFpsoImages);
fpsoTimer.start();
}else{
// All frames buffered //
currentFpsoFrame = 0;
fpsoLoaded = true;
fpsoLoading = false;
ncFPSO.removeElement(myLoadingPanel);
myLoadingPanel = null;
var fpsoBitmap:Bitmap = new Bitmap(fpsoImgArray[0]);
fpsoBitmap.smoothing = true;
fpsoImage.source = fpsoBitmap;
}
}
编辑: 我现在已经添加了一些调试功能,以便能够知道它失败的地方。 (因为它在调试期间工作,我需要在线调试实时版本。)
这就是我得到的:
ErrorID=2015
ErrorMessage=Error #2015
ErrorPos=fpsoSWFBuffer = new BitmapData(1920, 1080, false, 0x00ff0000);
CurrentFpsoFrame=168
Position in For Loop=8
EDIT2:这是我最终进入Flash Builder的错误消息。所以现在它也在这里崩溃.. = /
ArgumentError: Error #2015: Invalid BitmapData.
at flash.display::BitmapData/ctor()
at flash.display::BitmapData()
at Main/bufferTemplateImages()[E:\Workspace - Flash Builder\vCog Workspace\vCog Communicator 3.0\src\Main.mxml:461]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.utils::Timer/tick()
答案 0 :(得分:1)
你的缓冲1.5gb的内存? Flash不断向操作系统请求内存,直到操作系统无法再提供内存为止。如果它在您的计算机上运行,而在其他计算机上运行,则可能是他们的计算机正在运行许多其他程序请求内存,并且无法为您的项目提供足够的内存。我要检查的另一件事是,他们使用32位窗口的操作系统版本只能看到最大2Gb的内存。虽然这只是一个理论。也许首先尝试压缩图像以限制内存使用。
答案 1 :(得分:1)
似乎IE对Flash有一些最大内存使用限制,而Firefox则没有。
我可能错了,但我通过重写代码处理较小的文件(较少的内存使用量)并在用户旋转视图后加载高分辨率图像来修复它。
我曾经缓冲过1,5GB的meory,现在我缓冲大约750MB并且它可以工作。
仍然很奇怪,IE有局限性,Firefox和Chrome没有......
哦,好吧.. = /