【问题标题】:Clicking Text Element in Tween Halts Animation单击补间停止动画中的文本元素
【发布时间】:2010-10-01 09:34:19
【问题描述】:

我在补间时遇到了一些麻烦。以下是我的用法说明:

我有一个系统,其中文本框是影片剪辑的子项。当您单击“下一步”按钮时,movieclip 淡出为 0-alpha,完成后,文本框中的文本将更改(到数组中的下一个索引)并补间回 100-alpha。这在文本中进行了很好的过渡。

我的问题是,有时它不会补间,只会补间,给用户留下一个空白框,文本应该在哪里。

但是,我之前曾问过这个问题,并认为它是“超时”。现在,经过大量测试后,我意识到只有单击或选择文本框中的某些文本时才会发生这种情况。是否与此文本选择干扰下面的 changeText 函数有关...(它是同一个文本框,只是文本发生了变化)。

有没有其他人遇到过类似的故障?

代码:

function changeClick(e:MouseEvent):void {
    if (e.currentTarget==btnRight) {
        newDirect="right";
    } else {
        newDirect="left";
    }
    if (newDirect=="right") {
        if (pageTotal!=pageCurrent) {
            tweenText=new Tween(b_textB,"alpha",Strong.easeOut,1,0,.5,true);
            tweenText.addEventListener(TweenEvent.MOTION_FINISH, changeText);
        }
    } else {
        if (pageCurrent!=1) {
            tweenText=new Tween(b_textB,"alpha",Strong.easeOut,1,0,.5,true);
            tweenText.addEventListener(TweenEvent.MOTION_FINISH, changeText);
        }
    }
}

function changeText(e:TweenEvent):void {
    var newText:String;
    var pageCurrentConstant:int=pageCurrent;
    if (newDirect=="right") {
        for (var i=0; i<=(pageTotal-1); i++) {
            if ((pageCurrentConstant-1)==i) {
                if (i!=pageTotal-1) {
                    newText=pageText[i+1];
                    pageCurrent++;
                } else {
                    newText=pageText[i];
                }
            }
        }
    } else {
        for (var j=0; j<=pageTotal; j++) {
            if (pageCurrentConstant==j) {
                if (j!=0) {
                    newText=pageText[j-2];
                    pageCurrent--;
                } else {
                    newText=pageText[j];
                }
            }
        }
    }
    b_textB.htmlText=newText;
    tweenText=new Tween(b_textB,"alpha",Strong.easeOut,0,1,.5,true);
    drawWidget();
}

changeClick 由 btnRight 或 btnLeft 发起以在文本中导航

【问题讨论】:

  • 为该问题添加了解决方法。
  • 对不起伙计,我必须手动奖励它,我现在就去做 - 很高兴你提醒了我

标签: actionscript-3 text animation tween


【解决方案1】:

尝试禁用文本选择,使用b_textB.selectable = false

您将能够快速排除选择问题的可能性。但是您问题中的 sometimes 强烈表明这就是问题所在。

如果您需要文本在可见时可选择,只需在补间开始和结束时将其关闭和打开。

希望这能解决它。

哦,顺便说一句,这里列出了 Tween 类的几个完全免费的替代品...(Greensock 的 Tween 包不是免费的。)

更新...

解决这个问题并允许用户选择文本的唯一方法是复制一个可选的textfield,并在补间开始时关闭visible,然后在结束时再次打开,受影响的textfield 上的alpha 属性将正常工作。

我知道很笨拙,但它会产生效果,并允许用户在文本可见时选择它。

您也可以尝试将原始 textfield 包装在 Sprite 中,然后在其上执行 alpha Tween,但我不保证这将是 100% 修复。

【讨论】:

  • 我为中间解决方案设置了 b_textB.selectable = false ,这解决了问题,但客户端需要文本是可选的。我没有想到在补间之前和之后打开和关闭它。我现在会尝试并报告。
  • 不幸的是,我也尝试(在补间之前) setSelection(0,0) 取消所做的任何选择,但不幸的是它产生了相同的效果,现在我将保留 selectable 属性为假。
  • 我同意这很笨拙,但如果我通过调用函数等来完成这一切,我可以稍微整理一下。感谢您的解决方案 +100 :)
  • 好吧,我不明白你说 Greensock 的 Tween 包不是免费的是什么意思?我正在使用这个库..
  • Infact Greensock 的库是所有库中最好的。Adobe 应该弃用 Tween 类。 Tween 类有很多问题,但我使用 Greensock 库对许多对象进行了补间,它永远不会挂起。
【解决方案2】:

标准的Tween 类在许多情况下有点愚蠢。使用它时,您必须小心不要覆盖或删除它的实例,因为垃圾收集可能会在那时开始。同样,它总是要求您指定一个开始值,这可能会导致动画中的行为中断。

我不确定您的问题到底是什么,并且由于代码较少,很难重现它(如果您仍然遇到问题,您可能需要提供完整的工作示例代码)。不过,我建议您尝试不同的补间框架。我自己对Greensock's TweenLite 有很好的体验。它可能有一个奇怪的语法(至少我可以想象一个更好的语法),但总的来说它工作得很好,而且我通过简单地使用 TweenLite 解决了标准 Tween 类的很多问题。

【讨论】:

  • 基本上,如果文本正在显示并且我单击它或选择它的一部分,则在单击下一个按钮(或上一个)时,文本会补间,但不会返回。我不是确定文本是否补间,清空文本然后补间,或者,如果它根本不补间
  • 好吧,我只说一件事,Tween 类必须被 Adob​​e 弃用。它在许多情况下挂起,很少有人提到。 Greensock 的语法可能有点难,但这个库显然是赢家。它可以对数百个对象进行补间,并且永远不会挂起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多