单击Tween中的文本元素暂停动画

时间:2010-10-01 09:34:20

标签: actionscript-3 text animation tween

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

我有一个系统,其中文本框是movieclip的子项。单击“下一步”按钮时,动画片段将淡化为0-alpha,完成后,文本框中的文本将更改(到阵列中的下一个索引),并将其补间回到100-alpha。这样可以很好地过渡到文本。

我的问题是,有时候它不会补间回来,只会让用户留下一个空白的文本框。

但是,之前我曾经问过这个问题,认为它是“Timing out”。现在,经过重大测试后,我意识到只有当我单击或选择文本框中的某些文本时才会发生这种情况。它是否与此文本选择有关,与下面的changeText函数相关...(它是相同的文本框,只是文本更改)。

还有其他人遇到过类似的错误吗?

CODE:

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启动,以浏览文本

2 个答案:

答案 0 :(得分:1)

尝试使用b_textB.selectable = false

禁用文字选择

您将能够快速排除选择问题的可能性。但是你问题中的有时强烈地表明问题是什么。

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

希望这能解决它。

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

更新...

您可以解决此问题并允许用户选择文字的唯一方法是制作可选的重复textfield,并在补间开始时关闭此visible,然后再打开它结束后,受影响的alpha上的textfield属性将正常运行。

我知道非常kludgy,但它会使效果起作用,并允许用户在文本可见时选择它。

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

答案 1 :(得分:0)

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

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