【发布时间】:2013-03-06 16:30:13
【问题描述】:
我制作的这段代码运行良好 - 我的问题是最后我希望让它重新开始。
当我开始制作这个时,我的意图是,.swf 电影在结束时会循环播放——但这并没有发生。 然后我想我会尝试在代码本身中创建一种“重新启动”功能,以重置计时器和字符串.. 我已经用谷歌搜索并自己尝试了几件事 - 但完全没有运气......
首先我尝试重置变量 i。然后我试图删除计时器事件监听器。但没有成功。
让这段代码重新开始的最佳方法是什么?
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()
【问题讨论】:
-
创建一个将在整个序列结束时调用的函数,它将重置所有变量和掩码大小 - 以及您在代码中所做的任何更改。
-
@Lukasz'Severiaan'Grela 我想知道如何重置补间,以及如何删除正在进行的补间(如果有的话),如果由
TweenLite.to()调用。没有这个,这项任务可能是不可能的。 -
但是如何重置变量?
-
@Vesper 杀死 Tweens 使用:TweenLite.killTweensOf(YourFuncOrObject);像 TweenLite.killTweensOf(hand);
-
嗨 steffen -- 由于您已经在使用 GreenSock,这似乎是 TimelineLite/TimelineMax 的理想应用程序。它将允许您倒带并重新启动整个 Tweens 层次结构,而无需重新创建它们。
标签: actionscript-3 flash timer reset