1

我真的需要一些帮助,因为我不知道如何解决它!:/

这里有问题。

我的应用程序在我的计算机上运行良好,无论是离线还是在线(闪存上传到我们的网络服务器)。它在 IE 和 Firefox 中都可以正常工作。

但是,有些用户在 IE 中运行它确实有问题,而 Firefox 仍然可以。

该应用程序本身可以工作,尝试将一些帧缓冲到 BitmapData 时出现错误。

因此,在 Firefox 中,它运行良好。在 IE 中(在我的电脑上)效果很好。在 IE(在其他计算机上)中它不起作用,并且这个错误被强制转换。它发生在最后,这意味着在最后一次运行函数之前一切正常。(它像这样运行以允许更新进度条。如果我将 for 循环设置为 180,那么它会全部冻结,直到完成。这就是我执行 10 和 10 的原因。)

任何关于这方面的帮助都会很棒,因为我完全被困在这里......我已经跟踪了位图数据的大小,并且在出现错误时它是 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()
4

2 回答 2

1

你缓冲 1.5gb 的内存?Flash 不断向操作系统请求内存,直到操作系统无法再提供。如果它在您的计算机上运行,​​但在其他计算机上不起作用,则可能他们的计算机正在运行许多其他请求内存的程序,并且无法为您的项目提供足够的内存。我要检查的另一件事是,他们使用 32 位 Windows 的操作系统版本最多只能看到 2Gb 的内存。虽然这只是一个理论。也许先尝试压缩图像以限制内存使用。

于 2013-05-08T12:36:36.317 回答
1

似乎 IE 对 flash 有某种最大内存使用限制,而 Firefox 则没有。

我可能是错的,但我通过重写我的代码来处理更小的文件(更少的内存使用)并在用户旋转视图后加载高分辨率图像来修复它。

我以前缓冲 1.5GB 内存,现在缓冲大约 750MB,它可以工作。

还是奇怪 IE 有限制,而 Firefox 和 Chrome 没有……

哦,好吧.. =/

于 2013-05-13T08:54:46.130 回答