Actionscript 3 在Tween中单击文本元素将停止动画

Actionscript 3 在Tween中单击文本元素将停止动画,actionscript-3,text,animation,tween,Actionscript 3,Text,Animation,Tween,我和吐温之间有点麻烦。以下是我的用法说明: 我有一个系统,其中文本框是movieclip的子对象。当您单击“下一步”按钮时,movieclip将淡入0-alpha,完成后,文本框中的文本将更改(变为数组中的下一个索引),并变回100-alpha。这是一个很好的文本转换 我的问题是,有时它不会返回,只会返回,给用户留下一个文本应该在的空框 然而,我以前问过这个问题,以为这是“超时”。现在,经过重要的测试后,我意识到只有单击或选择文本框中的某些文本时才会发生这种情况。它可能与下面的changeTex

我和吐温之间有点麻烦。以下是我的用法说明:

我有一个系统,其中文本框是movieclip的子对象。当您单击“下一步”按钮时,movieclip将淡入0-alpha,完成后,文本框中的文本将更改(变为数组中的下一个索引),并变回100-alpha。这是一个很好的文本转换

我的问题是,有时它不会返回,只会返回,给用户留下一个文本应该在的空框

然而,我以前问过这个问题,以为这是“超时”。现在,经过重要的测试后,我意识到只有单击或选择文本框中的某些文本时才会发生这种情况。它可能与下面的changeText函数中的文本选择有关。。。(这是同一个文本框,只是文本发生了变化)

还有其他人经历过类似的故障吗

代码:

函数更改单击(e:MouseEvent):无效{
如果(e.currentTarget==btnRight){
newDirect=“右”;
}否则{
newDirect=“左”;
}
如果(newDirect==“右”){
如果(pageTotal!=pageCurrent){
tweenText=新Tween(b_textB,“alpha”,强。easeOut,1,0,5,真);
tweenText.addEventListener(TweenEvent.MOTION_FINISH,changeText);
}
}否则{
如果(当前页面!=1){
tweenText=新Tween(b_textB,“alpha”,强。easeOut,1,0,5,真);
tweenText.addEventListener(TweenEvent.MOTION_FINISH,changeText);
}
}
}
函数更改文本(e:TweenEvent):无效{
var newText:字符串;
var pageCurrentConstant:int=pageCurrent;
如果(newDirect==“右”){

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


我不太确定你的问题到底是什么,代码太少很难重现(如果你仍然遇到问题,你可能想提供一个完整的工作示例代码)。但是我建议你尝试一个不同的tweening框架。我自己在这方面有很好的经验。它可能有一个奇怪的语法(至少我可以想象一个更好的),但总的来说,它工作得非常好,我通过简单地使用TweenLite解决了标准Tween类的许多问题。

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


我不太确定你的问题到底是什么,代码太少很难重现(如果你仍然遇到问题,你可能想提供一个完整的工作示例代码)。但是我建议你尝试一个不同的tweening框架。我自己在这方面有很好的经验。它可能有一个奇怪的语法(至少我可以想象一个更好的),但总体来说,它工作得非常好,我通过简单地使用TweenLite解决了标准Tween类的许多问题。

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

你可以很快排除选择问题的可能性。但问题中的“有时”强烈地表明这就是问题所在

如果您需要文本在可见时可供选择,只需在二者之间的开始和结束处将其关闭和打开

希望这能解决问题

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

  • …这一次特别棒
更新。。。 解决此问题并允许用户选择文本的唯一方法是创建一个可选择的重复
textfield
,并在tween开始时为此切换
可见
,结束时再次切换,受影响的
textfield
上的
alpha
属性将正常工作

我知道这很麻烦,但它会起作用,允许用户在文本可见时选择文本


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

尝试禁用文本选择,使用
b\u textB.selective=false

你可以很快排除选择问题的可能性。但问题中的“有时”强烈地表明这就是问题所在

如果您需要文本在可见时可供选择,只需在二者之间的开始和结束处将其关闭和打开

希望这能解决问题

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

  • …这一次特别棒
更新。。。 解决此问题并允许用户选择文本的唯一方法是创建一个可选择的重复
textfield
,并在tween开始时为此切换
可见
,结束时再次切换,受影响的
textfield
上的
alpha
属性将正常工作

我知道这很麻烦,但它会起作用,允许用户在文本可见时选择文本

您也可以尝试将原始的
文本字段
包装在<
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();
}