我是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);
}
}
谢谢你们!
答案 0 :(得分:0)
你可以做的是创建一个名为sleep()
的函数,它将为你做延迟,当它完成时你可以让它调用另一个函数来移动和缩放你的文本字段,在我的例子中我称之为moveAndScaleText
(因为您可能正在使用矢量字体,因此缩放将很好地工作)。这可能看起来像这样:
首先将此导入语句添加到代码顶部(假设这是在时间轴中完成):
import flash.utils.getTimer;
然后使用我们即将创建的frameHandler()
函数更新您的sleep()
:
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()
}
}
睡眠功能将采用时间参数,以秒为单位。完成后,它将调用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语句添加到代码部分的顶部:
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秒
scaleTe和scaleY在whiteText上从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路线,因为这些是程序化动画的最佳选择。祝你好运!