使用较低的alpha值后,精灵可见性问题

时间:2015-07-04 18:38:35

标签: actionscript-3 alpha redraw

计划非常简单:使用MouseEvent.CLICK隐藏/显示Sprite。第一次点击应该使它消失,第二次点击使它再次可见。
实际发生的事情真的很奇怪,因为当alpha设置为1时Sprite没有显示(除非我放大或打开设置菜单)。这是一个例子:http://www.fastswf.com/8BuuY14

        private function doStuff(e:MouseEvent):void {
            (e.target.alpha == 1) ? e.target.alpha = 0 : e.target.alpha = 1;
        }

        //Sprite on the left
        var outter:Sprite = new Sprite(); //Container sprite (gray background)
        outter.x = outter.y = 20;
        outter.opaqueBackground = 0xCCCCCC;
        outter.addEventListener(MouseEvent.CLICK, doStuff);

        var inner:Sprite = new Sprite(); //Interactive child (red square)
        inner.graphics.beginFill(0xFF0000);
        inner.graphics.drawRect(0, 0, 50, 50);

        var speck:Shape = new Shape(); //Reference child (tiny black square)
        speck.graphics.beginFill(0x000000);
        speck.graphics.drawRect(50, 50, 5, 5);

        outter.addChild(inner);
        outter.addChild(speck);
        addChild(outter);

        //Sprite on the right
        var cont:Sprite = new Sprite();
        cont.x = 100; cont.y = 20;
        cont.graphics.beginFill(0xFF0000);
        cont.graphics.drawRect(0, 0, 50, 50);
        cont.addEventListener(MouseEvent.CLICK, doStuff);
        addChild(cont);

我确实设法通过使用等于或大于0.0078125的alpha值(在true alpha value中)来使其工作,但不是0.为什么会发生这种情况?

[编辑]
由于我确定错误可能是由我的IDE造成的,我也请求FlashDevelop社区提供帮助(请参阅链接评论)。

1 个答案:

答案 0 :(得分:0)

经过多次测试(在Windows 7上使用firefox,chrome和IE),我可以确认“问题”(至少是异常行为)与这些因素有关:

  • 使用MovieClipSpriteShape(以及其他一些对象)。

  • wmode(使用时):直接 gpu

  • Flash Player版本: ActiveX NPAPI 独立版本 14及以上

我认为这就像Flash Player“忽略”渲染对象可能是因为性能问题正在做这件事(当第一次alpha为0时不渲染对象),因为有时当我使用{ {3}}或Button,...我翻转它,在对象上触发Event.RENDER事件,代码正在运行一次。我还看到代码在同时为两个对象执行时工作...

为避免这种行为,您可以使用CheckBox属性:

object.cacheAsBitmap = true;

您还可以在设置alpha时使用cacheAsBitmap对象:

object.transform.colorTransform = new ColorTransform(1, 1, 1, (object.alpha == 1 ? 0 : 1), 0, 0, 0, 1);

或者简单地说,避免使用directgpu wmodes ...

希望可以提供帮助。