2009-11-11 106 views
0

我发布了这个到Adobe论坛,但我不期望在那里有一个好的答案。我正在寻找某人在Flash中完成游戏并遇到同样问题的帮助。Internet Explorer闪存性能

步骤来重现我的问题:

  1. 在Flash中创建简单点的DisplayObject

    dot.graphics.beginFill(color); 
    dot.graphics.drawCircle(0, 0, 2); 
    dot.graphics.endFill(); 
    
  2. 画点为位图多次框架结合

    bitmapData.draw(dot, null, null, "normal", null, _smoothing); 
    
  3. 测试传帧率浏览器,Win32上的Flash插件版本

期待:

帧率在大多数情况下

密切观察:

我使用Flash10b.ocx看到IE7下的帧率下降25%(10.0.22)和50使用Flash10c.ocx(10.0.32)降低帧率。 FireFox,Safari和Mac OSX下的PLugins不会出现相同的减速。

请帮助:

我想获得一个性能问题,我在Internet Explorer中看到求助/确认。 Adobe和Flash社区在互联网上很棒,但我很惊讶地发现没有关于这方面的信息,只有一些关于10.0.32和10.0.22上的电影播放的报道。

我的猜测是,在IE浏览器插件传递绘图调用Win32,这是缓慢的。

我的解决办法是:

不是每次都借鉴采用抽签的位图,缓存平局调用位图和使用CopyPixels。当我这样做时,各浏览器的性能是相同的,在10%以内。

bitmapData.copyPixels(dot.bitmapData,dot.bitmapData.rect,new Point(dot.x,dot.y),null,null,true); 

环路我使用:

function enterFrame(e:Event) { 
    bitmap.lock(); 

    for (var i:int=0;i<particles.length;i++) { 
     draw(particle[i]); 
    } 

    bitmap.unlock(); 
} 

说明有关其他可能的“已知”的问题,我想更多地了解:

  • 在IE浏览器的内存使用我的应用程序是据报道要小得多(在Flash Player中为33MB,在IE下为16MB)。
  • 在IE下,内存页错误超过10k /秒,而在Flash播放器中则没有。
  • 在IE下,stage.invalidate似乎会导致性能问题。
  • 在IE下,在位图上放置一个模糊滤镜会在Flash播放器中具有更大的性能。

回答

0

不同平台/浏览器/次要版本/调试器/等Flash插件性能(疯狂)不同。除了编码目标受众的最小公分母之外,您可以做的很少,以抵消这些差异。

也就是说,bitmapData.draw速度很慢,因为它会强制每次调用时重新扫描矢量数据。在引擎盖下,Flash也使用这种方法,但它跟踪屏幕的脏区域,因此它比你调用的时间要少(在调试器中打开“显示重绘区域”以便可视化地看到)。

您的bitmapData.copyPixels解决方案适用于手动光栅实现。这几乎是在Flash中获得高性能复杂动画的唯一机制。

0

感谢您的确认。我认为锁的目的是为了帮助闪存最大限度地减少重绘。即使Flash应用程序以接近60 fps的速度运行,我也看到了口吃。

而不是人们想知道我是否编码正确。我将一些全新的Tweenlite性能示例代码修改为150像素/秒左右的线性运动。这突出了人们看到的口吃。示例在http://forums.greensock.com/viewtopic.php?f=1&t=1857

+0

啊,这是着名的Flash“剪切”缺陷,自从它首次发布以来一直存在于该播放器中。没有解决方案或解决方法。 – 2009-11-13 11:07:49