【问题标题】:AS3 Filter GlowIn not TweeningAS3 滤镜 GlowIn 不补间
【发布时间】:2013-09-27 11:37:20
【问题描述】:

我正在做一个带有两个过滤器的按钮,当用户将光标悬停在它上面时(鼠标悬停)和两个过滤器补间,当光标退出它时。很基本的东西。

过滤器是 Glow 和 DropShadow。 Glow 应用于文本,而 DropShadow 应用于按钮背景(一个简单的矩形)。

这里的问题是 GlowIn 的过渡不起作用。当鼠标悬停在过滤器上时,它会立即以全 Alpha 应用过滤器。虽然 GlowOut 有效。

虽然它设置为 0.25 时间,但为了确定,我尝试了整整 5 秒,但仍然没有工作,所以这不是时间问题。

这是我的代码:

import caurina.transitions.Tweener;
import caurina.transitions.properties.FilterShortcuts;
import flash.filters.GlowFilter;
FilterShortcuts.init();

texto.mouseEnabled = false;

this.addEventListener(MouseEvent.MOUSE_OVER, FiltersIn);
this.addEventListener(MouseEvent.MOUSE_OUT, FiltersOut);

var glow = new GlowFilter(0xFFFFFF, 0, 5, 5, 3, 250);
texto.filters = [glow];

function FiltersIn(MouseEvent):void{
    Tweener.addTween(this, {_DropShadow_distance:5, _DropShadow_alpha:1, _DropShadow_blurX:5, _DropShadow_blurY:5, time:0.25, transition:"easeOutCubic"});
    Tweener.addTween(texto, {_Glow_alpha:100, time:0.25, transition:"easeOutCubic"});
}
function FiltersOut(MouseEvent):void{
    Tweener.addTween(this, {_DropShadow_distance:0, _DropShadow_alpha:0, _DropShadow_blurX:0, _DropShadow_blurY:0, time:0.25, transition:"EaseInCubic"});
    Tweener.addTween(texto, {_Glow_alpha:0, time:0.25, transition:"easeInCubic"});
}

【问题讨论】:

    标签: actionscript-3 flash filter dropshadow glow


    【解决方案1】:

    问题在于辉光滤镜的alpha 属性的范围是从 0 到 1,而不是 0 到 100。但是 Tweener 仍然尊重您提供的值 - 所以在插值 alpha 值时,它会跳过1,在通往 100 的路上,可能在第一帧。所以这就是为什么你会立即看到它进入完整的 alpha 版本。如果您将 100 换成 1,则可以解决问题。

    反向补间仍然按预期工作的原因是因为 alpha 值的上限为 1,因此即使尝试将其设置为 50、60 等到 100,当辉光滤镜存储实际值时,它将其上限为 1,允许反向补间在 1 和 0 之间平滑插值。

    这里是编辑:

    import caurina.transitions.Tweener;
    import caurina.transitions.properties.FilterShortcuts;
    import flash.filters.GlowFilter;
    FilterShortcuts.init();
    
    texto.mouseEnabled = false;
    
    this.addEventListener(MouseEvent.MOUSE_OVER, FiltersIn);
    this.addEventListener(MouseEvent.MOUSE_OUT, FiltersOut);
    
    var glow = new GlowFilter(0xFFFFFF, 0, 5, 5, 3, 250);
    texto.filters = [glow];
    
    function FiltersIn(MouseEvent):void{
        Tweener.addTween(this, {_DropShadow_distance:5, _DropShadow_alpha:1, _DropShadow_blurX:5, _DropShadow_blurY:5, time:0.25, transition:"easeOutCubic"});
        Tweener.addTween(texto, {_Glow_alpha:1, time:0.25, transition:"easeOutCubic"});
    }
    function FiltersOut(MouseEvent):void{
        Tweener.addTween(this, {_DropShadow_distance:0, _DropShadow_alpha:0, _DropShadow_blurX:0, _DropShadow_blurY:0, time:0.25, transition:"EaseInCubic"});
        Tweener.addTween(texto, {_Glow_alpha:0, time:0.25, transition:"easeInCubic"});
    }
    

    【讨论】:

    • 成功了,谢谢!解释为什么会发生的额外积分。
    【解决方案2】:

    编辑:由于混杂因素,先前的答案不正确!请查看新答案。

    【讨论】:

    • 我交换了我拥有 FLA 和 SWV 的“Caurina”文件夹中的文件,并重新启动了 flash,但它没有用(我可能已经使用了最新版本)。我从未使用过 SWC 文件,但是当我尝试打开它们时,它说无法读取文件。我做错了吗?
    • 啊,你知道吗?实际上,我必须在交换 SWC 的源代码版本的同时更正了错误的行。(为了您的信息,是相同的代码,但为了方便使用一个文件而进行了预编译。您可以通过以下方式使用它们转到“文件”>“动作脚本设置”,然后将它们添加到“库路径”选项卡。)所以上面的内容不正确,抱歉。我现在就提交一个新的答案!
    【解决方案3】:

    专业提示:不要费心使用 Tweener :) 使用 GreenSock 的 Tweenmax 或 Starling 的 Juggler - 他们是最好的

    【讨论】:

    • aww 被否决了? Well TweenMax.to(stack, .3, { autoAlpha:0 }); :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多