Flash延时
下面接着写:
function aa(){
gotoAndPlay(x);
}
tiaozhuanId=setInterval(aa,5000);//这里假定为5秒
然后在你跳转到的桢添加:clearInterval(tiaozhuanId);
回答者:ningyue220 - 高级经理 七级 6-1 11:19
-------------------------------------------------------------------------------------
冒昧,上面那位的
,可用性有待商量,可以兼容的话是很好的。
setInterval 函数
可用性:ActionScript 1.0、Flash Player 6
--------------------------------------------------------
-
一般的方法
首先
Stop();
time=0;
先前的
onEnterFrame = function () {}
函数中加入
if(time/12>6){//每秒帧数一般12帧,这里设为6秒
gotoAndPlay(x);
}else{
time++;
}
--------------------------------------
一般都能解决。
回答者:Legend51646392 - 助理 二级 6-1 20:37
//在第一帧上加代码,意思是过5秒后跳到第3帧,5000是代
5秒,自己想改多少就改多少,
//跳帧也可自己选择,跳完以后用clearInterval(cle)删除函数,要不每过5秒它都会跳一次要
stop()
cle=setInterval(main,5000)
function main(){
gotoAndStop(3)
clearInterval(cle)
}
clearInterval 函数
var i = 0;
var t = 1;
var dis = 20;
_root.createEmptyMovieClip("listenTime_mc", this.getNextHighestDepth());
listenTime_mc.onEnterFrame = function() {
trace(t);
t++;
if ((t-i)>=dis) {
trace("Play");
i = t;
}
};//保证不会出错!
stop();
function a(){
play();
clearInterval(a)
}
var a=setInterval(a,20000);
n=10; //n为时间(秒)
var myInterv=setInterval(go,n *1000);
function go(){
//这里执行动作
clearInterval(myInterval);
}
a=getTimer();
this.onEnterFrame=function(){
for(var i=0;i<10000;i++){
}
b=getTimer();
c=b-a
if(c>5000){
delete onEnterFrame;
trace("++++++++++++++");
//把要延时做事,放在这里;
}
}
大家都知道,FLASH中的循环(LOOP)存在一个致命的弱点,即它存在一个最大循环上限:2000000次。超出这个上限时,FLASH PLAYER将认为当前循环是一个无限循环。因此,当我们在寻找一个通用的时间延迟算法的FLASH实现时,我们时无法相信LOOP循环的,我们只能寻找其他的手段。在FLASH中的一个函数——GetTimer正是我们寻找的另一条实现时间延迟算法的‘路’。
GetTimer函数的作用就是返回FLASH影片由开始播放到函数调用这两点间的时间间隔,它的返回值单位时毫秒。我们在使用GetTimer的时候要注意单位的转换!否则可能会出现要求等1秒却等了1毫秒的时间等类似的笑话。
下面我们给出一个简单通用的算法
1. 在影片上新建一个MovieClip,命名为DelayFunc并进入编辑这个MovieClip;
2. 在DelayFunc的第一桢处填加标签(Label)为Start,并加入下列行为。
算法解释:首先要做的是获取
延迟时间/:Delay,如果没有设定则取缺省值5秒。这里的变量Start就是此次延迟的起始时间。
Comment: 变量初始化
If (/:Delay="")
Set Variable: "/:Delay" = 5
End If
Comment: 获取当前时间作为起始参照
Set Variable: "Start" = GetTimer
3. 在DelayFunc的第三桢上填加以下行为:
算法解释:这段算法主要的工作就是依据时间比较的结果来进行相应的处理。当延迟时间没有达到即/:Elapsed小于/:Delay,那么程序进入下一个循环(Go to and Play (2));如果延迟时间达到了或者稍稍超过了(这里的超过主要是由于播放第二桢所造成的时间误差,一般在0.05秒左右),那么程序体返回调用延迟函数所在时线并将程序体置零(Go to and Stop(1))。
Comment: 获取以过去时间,注意单位换算
Set Variable: "/:Elapsed" = (GetTimer-Start)/1000
Trace (/:Elapsed)
Comment: 时间判断函数,这是算法的主体
If (/:Elapsedminu1){
i=1;
break;
}else{
if (second2>second1+2) //延时两秒
{
i=1;
break;
}
}
delete minu2;
3.在第12帧上
stop();
if(i==1){
play();
break;
}else{
gotoAndPlay(11);
}
延时函数:
function showTime(second, option) {
//延时函数
this.createEmptyMovieClip("t_mc", 9999);
t = getTimer();
f = false;
if ((getTimer()-t)>(second*1000)) {
option();
}
}
function go() {
//加入效果
jpg2._y = jpg2._y+77;
jpg2._alpha = jpg2._alpha-15;
}
fscommand("fullscreen", "true");
createEmptyMovieClip("jpg1", 1);
createEmptyMovieClip("jpg2", 2);
jpg1.loadMovie("1.jpg");
jpg2.loadMovie("2.jpg");
i = 0;
while (i<=100) {
showTime(0.1, go);
i = i+20;
}
createEmptyMovieclip("pcking",1);
//新建一个空的Movieclip命名为pcking
function draw () {
//声明draw()函数
pcking.lineStyle(random(++i/100),++i*random(30),(++i/30));
//利用random函数取随机数来决定线条的颜色,粗细以及透明度
tempx=random(500);
tempy=10;
//声明变量,用来决定线段的开始端点的坐标
pcking.moveTo(tempx,tempy);
pcking.lineTo(tempx, tempy+300);
//用线段连接坐标为tempx,tempy的端点与坐标为tempx, tempy+300的端点
}
idDream=setInterval(draw,50);
//每隔50毫秒重复执行一次函数draw()