我已经使这个代码工作正常 - 我的问题是,最后我希望重新开始。
当我开始制作这个我的意图时,.swf电影只会在它结束时循环 - 但这不会发生。 然后我想我会尝试在代码本身中进行一种“重启”功能,这将重置计时器和字符串.. 我自己搜索了一下并尝试了几件事 - 但是根本没有运气......
首先我试图重置变量i。然后我试图删除计时器eventListeners。但没有成功。
让这段代码重新开始的最佳方法是什么?
import flash.utils.Timer;
import flash.events.TimerEvent;
import com.greensock.*;
import com.greensock.easing.*;
var str_one:String = 'På fredag udkommer metroXpress, som du kender den, for sidste gang... ';
var i:uint = 0;
var timer_one:Timer = new Timer(50);
timer_one.start();
timer_one.addEventListener(TimerEvent.TIMER, goTime);
var str_two:String = 'På fredag udkommer metroXpress, som du kender den, for sidste gang... Fra 2. april bliver du mødt af en helt ny avis, med det bedste fra den gamle, tilsat en masse nyt.';
var timer_two:Timer = new Timer(50);
timer_two.addEventListener(TimerEvent.TIMER, goTime_two);
var str_three:String = 'På fredag udkommer metroXpress, som du kender den, for sidste gang... Fra 2. april bliver du mødt af en helt ny avis, med det bedste fra den gamle, tilsat en masse nyt.Sådan vil vi skabe en endnu bedre avis til dig, der er på farten. Glæd dig – det gør vi!';
var timer_three:Timer = new Timer(50);
timer_three.addEventListener(TimerEvent.TIMER, goTime_three);
function goTime(e:TimerEvent) {
tekstbox1_txt.appendText(str_one.charAt(i));
i++;
if (i>=str_one.length) {
timer_one.stop();
TweenLite.to(hand, 1, {y:175, onComplete:ripwhite});
}
}
function ripwhite():void {
TweenLite.to(hand, 1, {y:405});
TweenLite.to(white_mask, 1, {y:320, onComplete:fadetekst1ud});
}
function fadetekst1ud():void {
TweenLite.to(tekstbox1_txt, 1, {alpha:0, onComplete:tekstnr2});
}
function tekstnr2():void {
timer_two.start();
}
function goTime_two(e:TimerEvent) {
tekstbox2_txt.appendText(str_two.charAt(i));
i++;
if (i>=str_two.length) {
timer_two.stop();
TweenLite.to(tekstbox2_txt, 1, {alpha:1, onComplete:forsinkelse});
}
}
function forsinkelse():void {
TweenLite.to(tekstbox2_txt, 1, {alpha:0, onComplete:tekstnr3});
}
function tekstnr3():void {
timer_three.start();
}
function goTime_three(e:TimerEvent) {
tekstbox3_txt.appendText(str_three.charAt(i));
i++;
if (i>=str_three.length) {
timer_three.stop();
TweenLite.to(tekstbox3_txt, 1, {alpha:1, onComplete:sidstefunktion});
}
}
function sidstefunktion():void {
TweenLite.to(tekstbox3_txt, 1, {alpha:0});
TweenLite.to(rippedpic, 1, {alpha:0});
}
编辑:
设置复位功能,然后使其循环回我的初始功能,如下所示:
function nulstil():void {
i = 0;
TweenLite.killTweensOf(hand);
TweenLite.killTweensOf(tekstbox1_txt);
TweenLite.killTweensOf(tekstbox2_txt);
TweenLite.killTweensOf(tekstbox3_txt);
timer_one.addEventListener(TimerEvent.TIMER, goTime);
timer_two.addEventListener(TimerEvent.TIMER, goTime_two);
timer_two.addEventListener(TimerEvent.TIMER, goTime_three);
TweenLite.to(white_mask, 0.1, {onComplete:goTimeAgain});
}
我在输出中得到以下内容:
ArgumentError:错误#1063:Untitled_fla :: MainTimeline / goTimeAgain()上的参数计数不匹配。预计1,得0。 在功能/ http://adobe.com/AS3/2006/builtin::apply() 在com.greensock.core :: TweenCore / complete() 在com.greensock :: TweenLite / renderTime() 在com.greensock.core :: SimpleTimeline / renderTime() 在com.greensock :: TweenLite $ / updateAll()
答案 0 :(得分:2)
我在评论中建议你使用TimelineMax。这是我认为应该有效的完整代码。请仔细注意我使用offset
的{{1}}参数以及我不知道的位置。您需要填写append
函数,将所有视觉元素设置为正确的起始位置,alphas等。
基本上这是如何工作的:我们使用TimelineMax的resetEverything
功能,而不是使用Timers
。回调有"长度"在时间轴中为0,因此您必须在附加回调时手动前进播放头,并在每批回调后添加第一个补间(我们使用offset参数的位置)。但是,补间确实有一个长度,因此后续调用addCallback
会自动将补间对齐到时间轴的末尾,直到该点为止。
在TimelineMax的构造函数中,我们指定了append
,这将导致时间轴永远循环。最后,我们在一开始就添加了repeat : -1
回调,这样每次时间线重新启动时,我们都可以确保所有元素都处于正确的起始位置。其余部分是完全自动的,由时间线处理。
resetEverything