【问题标题】:Flash ActionScript 3.0 Resize Event TextFlash ActionScript 3.0 调整事件文本大小
【发布时间】:2014-04-15 11:15:45
【问题描述】:

我是 flash 和 actionscript 的新手。我正在尝试为文本制作动画,但找不到我想做的事情,也不知道该怎么做。

我有一个在文本字段上创建打字机效果的动作脚本代码。在这个效果之后,我想让文本停止几秒钟,然后我想将它移动到另一个地方并同时调整它的大小。这可能吗? 这是我的代码:

import flash.events.Event;

var myString:String = "LIGA DOS CAMPEÕES";
var myArray:Array = myString.split("");

addEventListener(Event.ENTER_FRAME,frameHandler);
function frameHandler(event:Event):void{
if(myArray.length > 0) {
whiteText.appendText(myArray.shift());
} else {
removeEventListener(Event.ENTER_FRAME,frameHandler);
}
}

谢谢大家!

【问题讨论】:

    标签: actionscript-3 flash events actionscript resize


    【解决方案1】:

    你可以做一个名为sleep()的函数,它会为你做延迟,当它完成时你可以让它调用另一个函数来移动和缩放你的文本字段,在我的例子中我称之为@987654323 @(因为您可能使用的是矢量字体,所以缩放效果很好)。这可能看起来像这样:

    首先将此导入语句添加到代码的顶部(假设这是在时间轴中完成的):

    import flash.utils.getTimer;
    

    然后使用我们即将创建的 sleep() 函数更新您的 frameHandler()

    function frameHandler(event:Event):void{
        if(myArray.length > 0) {
            whiteText.appendText(myArray.shift());
        } else {
            removeEventListener(Event.ENTER_FRAME, frameHandler) ;
            sleep( 3 ); //run for a 3 second delay, then call moveAndScaleText()
        }
    }
    

    sleep 函数将采用时间参数,以秒为单位。完成后会调用moveAndScaleText函数

    function sleep( secondsDelay:int ):void {
        var currentTime:int;
        var startTime:int = getTimer();
        var delay:int = secondsDelay * 1000; //convert seconds to ms
        while( currentTime - startTime < delay ) {
            currentTime = getTimer();
        }
        moveAndScaleText(); //call our last function scale text
    }
    

    现在用于缩放和移动文本字段。如果您使用TweenMax Library,您可以通过几种不同的方式来执行此操作:在一行代码中您可以移动和缩放:

    function moveAndScaleText():void {
        TweenMax.to( whiteText, 2, { x: 300, scaleX:2, scaleY: 2} );
    }
    

    这会将其 X 和 Y 缩放为 2,并将其移动到 300 的 x 位置。显然,这将需要下载该库并将其添加到您的项目中。所以另一种方法是使用fl 包。为此,您将这些导入语句添加到代码部分的顶部:

    import fl.transitions.Tween;
    import fl.transitions.easing.*;
    

    然后在moveAndScaleText() 你这样做:

    function moveAndScaleText():void {
        new Tween( whiteText, "x", Regular.easeIn, whiteText.x, 300, 3, true );
        new Tween( whiteText, "scaleX", Regular.easeIn, 1, 2, 3, true );
        new Tween( whiteText, "scaleY", Regular.easeIn, 1, 2, 3, true );
    }
    

    这基本上是在说...

    • 将 whiteText 沿 x 轴移动到 300,超过 3 秒

    • whiteText 上的 scaleX 和 scaleY 从 1 到 2,超过 3 秒

    这将是您以编程方式实现它的最简单方法。另一种方法是使用Event.ENTER_FRAME,然后移动TextField 并按一定比例缩放,直到达到所需的值。我不会写这个,因为我认为这可能很明显,但我可以对其进行伪编码。如果你走这条路,在你的 Event.ENTER_FRAME 函数中,你会有这样的语句:

    if ( whiteText.scaleX < 2 ) {
        whiteText.scaleX += 0.1;
        whiteText.scaleY += 0.1;
    }
    if ( whiteText.x < 300 ) {
        whiteText.x += 1;
    }
    

    您可以通过以下几种方式完成该任务。如果是我,我可能会选择 Tween 或 TweenMax 路线,因为它们最适合程序化动画。祝你好运!

    【讨论】:

    • 您好,感谢您的快速回复。所以,我使用了 Tween 选项。但是,我收到此语法错误“1084-在Regular之前期望rightparen。”。这被称为“new Tween(whiteText, "scaleY", Regular.easeIn, 1, 2, 3, true);"线。我该如何解决这个问题?
    • 这是一个格式错误,它不是来自我发布的代码。在您的代码中的某个地方需要一个右括号,您必须仔细检查您的代码以找到缺少的地方。这也是在时间轴中编码而不是在 actionscript 中使用代码编辑器的缺点。
    • 今天我尝试了 TweenMax。但是我可能在睡眠功能上做错了,因为现在它停止了,其他任何东西都在移动。这是我的代码......(它写在一个新的答案中)
    • 在sleep函数结束时你必须调用moveAndScaleText(),但是在你调用sleep之前移除事件监听器,我会把它添加到我的答案中
    猜你喜欢
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2011-07-31
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多