Chrome Flash播放器在Flash窗口中创建透明矩形

时间:2012-12-07 17:57:13

标签: flash google-chrome visual-glitch

我遇到了一个奇怪的,非常难以在Flash视频播放器中重现图形故障!到目前为止仅在Chrome中。

screenshot

下面的灰色矩形"进入建筑物"显示了flash播放器所处的html div的背景颜色。""在哪里?#34;链接。这些是精灵(包含其他几个精灵和显示对象),它们具有脚本化的悬停动画(它们会慢慢移向一个具有某个原点范围的随机点)。故障与它们一起调整,有时会消失。

它使整个闪存组件看到的最奇怪的是什么。我有这个代码 在创建视频播放器时运行:

        graphics.clear();
        graphics.beginFill(0xff00ff, 1);
        graphics.drawRect(0, 0, _stage.stageWidth, _stage.stageHeight);
        graphics.endFill();

所以视频播放器背面应该有一个鲜艳的颜色,如果我不加载视频播放器,我已经确认它就在那里。然而,这种明亮的颜色不会显示,而是包含播放器的背景div。

这对我来说完全没有意义......我不知道如何调试它。我所知道的是,故障的出现取决于文本链接在屏幕上悬停的位置。

闪存以WMODE透明方式加载,我们需要它,因为它有一个可扩展的机翼'在半透明的一面。

编辑:

现在是www.48hourgames.com。创建帐户后,您将看到以上面的屏幕截图结尾的视频播放器。

5 个答案:

答案 0 :(得分:5)

这是Pepper Flash播放器的问题。 Adobe和谷歌已经开展了一段时间的工作,他们打算让Flash保持活跃并在Linux平台上运行。

不幸的是,Pepper Flash非常缺陷。在今年夏天的某个时候,Pepper Flash成为Chrome中所有操作系统的默认Flash插件。它有很多问题没有真正的解决方案,除了禁用它(并希望Adobe /谷歌将解决它们)。

禁用Pepper Flash:

  • 转到:chrome:// plugins
  • 点击右上角的详细信息图标
  • 找到Flash Player插件部分,您可能会在此处安装多个版本的Flash。我刚刚安装了Chrome来验证它是否存在问题,并且使用了Pepper Flash和2个“普通”版本的Flash。
  • 禁用路径中包含“PepperFlash”的Flash插件。

答案 1 :(得分:4)

我能够非常可靠地重现这个问题。一些想法:

  • wmode transparent之类的声音可能会反复出现问题。也许你可以让Flash元素的宽度为100%,并在左/右边距处做一个无缝的背景。在Flash中,您可以阻止它通过stage.scaleMode = StageScaleMode.NO_SCALE;扩展您的内容。如果Flash走了整个宽度,你就可以摆脱wmode transparent,可能会很好。
  • 您是否尝试为覆盖电影的两个按钮设置cacheAsBitmaptrue
  • 因为工件只出现在电影的最后,当它是一个静止的帧时,可能会在电影达到最终状态时将cacheAsBitmap设置为true吗?
  • 当电影到达最终状态并且PNG图像看起来相同时,可能换掉电影吗?
  • 如果PNG图像不是PNG图像,可能会将两个按钮换掉?

如果这些不起作用......变得更加绝望。

  • 也许将侧边菜单(扩展Flash元素)从SWF中删除到它自己的SWF中并放在电影SWF的顶部。这样,电影SWF可能会丢失wmode transparent,并且侧面菜单上可能不会出现故障。
  • 侧边菜单可以是HTML。
    • 翻转状态可以是HTML元素。
    • 或者,侧边菜单可以调用Flash元素来切换翻转文本。必须通过ExternalInterface类(details)注册对Flash的调用。

由于我没有代码来测试任何东西,所以这些都是在黑暗中镜头

我会从cacheAsBitmap相关的想法开始。然后转到PNG想法(按钮,最后一帧)。从那里,尝试Flash元素的全宽版本。如果这些不起作用,您可能需要考虑新设计。如果这不是一个选项,我将继续拆分侧面菜单,如上所述的变化。

答案 2 :(得分:2)

我今天遇到了这个问题,最新的Flash Player版本11.6 + Chrome 27.在某些计算机上它正在运行,而在其他几台计算机上,它不是,这使得很难找到问题,因为它不会发生在我身边。

我认为这是Flash的错误,而不是Chrome,因为当我右键单击时 - >放大,右键 - >缩小脏补丁消失

所以我四处寻找一个肮脏的快速解决方案。

尝试 cacheAsBitmap 方法:不起作用(此修复程序适用于“黑色透明度”问题但不适用于此问题。)

尝试两帧图像方法:既不起作用也不起作用(不确定原因)

我终于找到了一种方法来修复(多次测试):

由于脏动的白色补丁仅在动画结束时出现我在舞台上放置了一个透明形状补间剪辑并让它永远运行。它有效。

p / s:其实我试着把它添加为评论而不是答案,但找不到办法,这很奇怪。

答案 3 :(得分:0)

今天我在Google Chrome 31.0.1650.63上玩拼图游戏时遇到了这个问题。我通常不使用这个浏览器,因此闪存应该在每个浏览器中完全相同,所以我听到白色矩形覆盖在我的游戏中时有点惊讶。将wmode设置为opaque而不是透明修复了这个问题。

答案 4 :(得分:0)

同样在这里,也在我的视频播放器中。

仅在镀铬胡椒闪光灯中,并且只有当swf嵌入透明的wmode时才会出现。

今天我在网上找到了一个修复/解决方法/黑客,我可以使用它:

“如果你想通过一个简单的黑客来绕过这个问题,你可以画一个透明填充的MovieClip。每一帧切换它的'alpha'属性。因为它的填充是透明的,它的'alpha'属性什么都不做,除了强制全屏重绘以更新MovieClip的alpha属性。这反过来修复了由于wmode透明而导致的任何故障渲染。

通过添加moueEnabled = false,确保黑客不会干扰任何现有的鼠标事件“

import flash.display.MovieClip;
import flash.events.Event;

var redrawAll = new MovieClip();
redrawAll.mouseEnabled = false;
redrawAll.graphics.beginFill(0x000000, 0);
redrawAll.graphics.moveTo(0,0);
redrawAll.graphics.lineTo(stage.stageWidth, 0);
redrawAll.graphics.lineTo(stage.stageWidth, stage.stageHeight);
redrawAll.graphics.lineTo(0, stage.stageHeight);
redrawAll.graphics.endFill();
addChild(redrawAll);

addEventListener(Event.ENTER_FRAME, function(e:Event){
    redrawAll.alpha = (redrawAll.alpha == 0)? 1 : 0;                 
});

来源:https://code.google.com/p/chromium/issues/detail?id=173089#c12