【问题标题】:Loop 3 Times and then Stop - Flash AS3循环 3 次然后停止 - Flash AS3
【发布时间】:2013-03-18 20:31:36
【问题描述】:

这是我在我的主机上的代码。我需要页面只从上到下读取代码 3 次。即使你能想到我怎么做才能让它停止 45 秒。对不起,我脑死了,不能再思考了。有什么建议吗?

import com.greensock.*;
import com.greensock.easing.*;

import flash.utils.*;

function doStuff() {

    //startValues
    box1.back.rotationY = -90;
    box1.back.alpha=0;

    var flipSpeed:Number = .25; 
    var flipSpeedbea:Number = .04; 

    var tl:TimelineMax = new TimelineMax({delay:2});
    tl.append(TweenMax.to(box1.front, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    tl.append(TweenMax.to(box1.back, 0, {alpha:1, immediateRender:false}))
    tl.append(TweenMax.to(box1.back, flipSpeed, {rotationY:0, ease:Linear.easeNone}))
    tl.append(TweenMax.to(box1.front, flipSpeed, {rotationY:0, visible:true, ease:Linear.easeNone}))
    var tb:TimelineMax = new TimelineMax({delay:4});

    box2.back2.rotationY = -90;
    box2.back2.alpha=0;

    tb.append(TweenMax.to(box2.front2, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    tb.append(TweenMax.to(box2.back2, 0, {alpha:1, immediateRender:false}))
    tb.append(TweenMax.to(box2.back2, flipSpeed, {rotationY:0, ease:Linear.easeNone}))
    tb.append(TweenMax.to(box2.front2, flipSpeed, {rotationY:0, visible:true, ease:Linear.easeNone}))

    var ins:TimelineMax = new TimelineMax({delay:6});

    box3.back3.rotationY = -90;
    box3.back3.alpha=0;

    ins.append(TweenMax.to(box3.front3, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    ins.append(TweenMax.to(box3.back3, 0, {alpha:1, immediateRender:false}))
    ins.append(TweenMax.to(box3.back3, flipSpeed, {rotationY:0, ease:Linear.easeNone}))
    ins.append(TweenMax.to(box3.front3, flipSpeed, {rotationY:0, visible:true, ease:Linear.easeNone}))

    var per:TimelineMax = new TimelineMax({delay:7});

    person.back_person.rotationY = -90;
    person.back_person.alpha=0;

    per.append(TweenMax.to(person.front_person, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    per.append(TweenMax.to(person.back_person, 0, {alpha:1, immediateRender:false}))
    per.append(TweenMax.to(person.back_person, flipSpeed, {rotationY:0, ease:Linear.easeNone}));

    var bea:TimelineMax = new TimelineMax({delay:7});

    be_a.bea_back.rotationY = -90;
    be_a.bea_back.alpha=0;

    bea.append(TweenMax.to(be_a.bea_front, flipSpeedbea, {rotationY:90, visible:false, ease:Linear.easeNone}))
    bea.append(TweenMax.to(be_a.bea_back, 0, {alpha:1, immediateRender:false}))
    bea.append(TweenMax.to(be_a.bea_back, flipSpeedbea, {rotationY:0, ease:Linear.easeNone}));
    bea.append(TweenMax.to(be_a.bea_front, flipSpeedbea, {rotationY:0, visible:true, ease:Linear.easeNone}))

    stop();

    setTimeout(doStuff, 15000);
}

doStuff();

是否可以将 doStuff 上的功能设置为仅继续运行 45 秒?基本上我需要功能“doStuff”以每次 15 秒播放 3 次。

【问题讨论】:

  • @TheDarkIn1978 感谢您的回复。就目前而言,我现在正在使用一个计时器,它将影片剪辑设置为每 15 秒重播一次。我很难弄清楚到底是什么代码以及我需要将代码放在哪里才能让整部电影在 45 秒后停止。

标签: actionscript-3 flash loops banner


【解决方案1】:

第一个解决方案是使用变量作为计数器,这样您就不需要使用 Timer:

import com.greensock.*;
import com.greensock.easing.*;

import flash.utils.*;

var box1:Object;
var box2:Object;
var box3:Object;
var person:Object;
var be_a:Object;

function stop() {}

var stuffCount:uint = 0;

function doStuff() {

    stuffCount++;

    //startValues
    box1.back.rotationY = -90;
    box1.back.alpha=0;

    var flipSpeed:Number = .25; 
    var flipSpeedbea:Number = .04; 

    var tl:TimelineMax = new TimelineMax({delay:2});
    tl.append(TweenMax.to(box1.front, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    tl.append(TweenMax.to(box1.back, 0, {alpha:1, immediateRender:false}))
    tl.append(TweenMax.to(box1.back, flipSpeed, {rotationY:0, ease:Linear.easeNone}))
    tl.append(TweenMax.to(box1.front, flipSpeed, {rotationY:0, visible:true, ease:Linear.easeNone}))
    var tb:TimelineMax = new TimelineMax({delay:4});

    box2.back2.rotationY = -90;
    box2.back2.alpha=0;

    tb.append(TweenMax.to(box2.front2, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    tb.append(TweenMax.to(box2.back2, 0, {alpha:1, immediateRender:false}))
    tb.append(TweenMax.to(box2.back2, flipSpeed, {rotationY:0, ease:Linear.easeNone}))
    tb.append(TweenMax.to(box2.front2, flipSpeed, {rotationY:0, visible:true, ease:Linear.easeNone}))

    var ins:TimelineMax = new TimelineMax({delay:6});

    box3.back3.rotationY = -90;
    box3.back3.alpha=0;

    ins.append(TweenMax.to(box3.front3, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    ins.append(TweenMax.to(box3.back3, 0, {alpha:1, immediateRender:false}))
    ins.append(TweenMax.to(box3.back3, flipSpeed, {rotationY:0, ease:Linear.easeNone}))
    ins.append(TweenMax.to(box3.front3, flipSpeed, {rotationY:0, visible:true, ease:Linear.easeNone}))

    var per:TimelineMax = new TimelineMax({delay:7});

    person.back_person.rotationY = -90;
    person.back_person.alpha=0;

    per.append(TweenMax.to(person.front_person, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    per.append(TweenMax.to(person.back_person, 0, {alpha:1, immediateRender:false}))
    per.append(TweenMax.to(person.back_person, flipSpeed, {rotationY:0, ease:Linear.easeNone}));

    var bea:TimelineMax = new TimelineMax({delay:7});

    be_a.bea_back.rotationY = -90;
    be_a.bea_back.alpha=0;

    bea.append(TweenMax.to(be_a.bea_front, flipSpeedbea, {rotationY:90, visible:false, ease:Linear.easeNone}))
    bea.append(TweenMax.to(be_a.bea_back, 0, {alpha:1, immediateRender:false}))
    bea.append(TweenMax.to(be_a.bea_back, flipSpeedbea, {rotationY:0, ease:Linear.easeNone}));
    bea.append(TweenMax.to(be_a.bea_front, flipSpeedbea, {rotationY:0, visible:true, ease:Linear.easeNone}))

    stop();

    if (stuffCount < 3)
    {
        setTimeout(doStuff, 15000);
    }
}

doStuff();

使用Timer 的第二个解决方案:

import com.greensock.;
import com.greensock.easing.*;

import flash.events.TimerEvent;
import flash.utils.*;


function doStuff() {

    //startValues
    box1.back.rotationY = -90;
    box1.back.alpha=0;

    var flipSpeed:Number = .25; 
    var flipSpeedbea:Number = .04; 

    var tl:TimelineMax = new TimelineMax({delay:2});
    tl.append(TweenMax.to(box1.front, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    tl.append(TweenMax.to(box1.back, 0, {alpha:1, immediateRender:false}))
    tl.append(TweenMax.to(box1.back, flipSpeed, {rotationY:0, ease:Linear.easeNone}))
    tl.append(TweenMax.to(box1.front, flipSpeed, {rotationY:0, visible:true, ease:Linear.easeNone}))
    var tb:TimelineMax = new TimelineMax({delay:4});

    box2.back2.rotationY = -90;
    box2.back2.alpha=0;

    tb.append(TweenMax.to(box2.front2, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    tb.append(TweenMax.to(box2.back2, 0, {alpha:1, immediateRender:false}))
    tb.append(TweenMax.to(box2.back2, flipSpeed, {rotationY:0, ease:Linear.easeNone}))
    tb.append(TweenMax.to(box2.front2, flipSpeed, {rotationY:0, visible:true, ease:Linear.easeNone}))

    var ins:TimelineMax = new TimelineMax({delay:6});

    box3.back3.rotationY = -90;
    box3.back3.alpha=0;

    ins.append(TweenMax.to(box3.front3, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    ins.append(TweenMax.to(box3.back3, 0, {alpha:1, immediateRender:false}))
    ins.append(TweenMax.to(box3.back3, flipSpeed, {rotationY:0, ease:Linear.easeNone}))
    ins.append(TweenMax.to(box3.front3, flipSpeed, {rotationY:0, visible:true, ease:Linear.easeNone}))

    var per:TimelineMax = new TimelineMax({delay:7});

    person.back_person.rotationY = -90;
    person.back_person.alpha=0;

    per.append(TweenMax.to(person.front_person, flipSpeed, {rotationY:90, visible:false, ease:Linear.easeNone}))
    per.append(TweenMax.to(person.back_person, 0, {alpha:1, immediateRender:false}))
    per.append(TweenMax.to(person.back_person, flipSpeed, {rotationY:0, ease:Linear.easeNone}));

    var bea:TimelineMax = new TimelineMax({delay:7});

    be_a.bea_back.rotationY = -90;
    be_a.bea_back.alpha=0;

    bea.append(TweenMax.to(be_a.bea_front, flipSpeedbea, {rotationY:90, visible:false, ease:Linear.easeNone}))
    bea.append(TweenMax.to(be_a.bea_back, 0, {alpha:1, immediateRender:false}))
    bea.append(TweenMax.to(be_a.bea_back, flipSpeedbea, {rotationY:0, ease:Linear.easeNone}));
    bea.append(TweenMax.to(be_a.bea_front, flipSpeedbea, {rotationY:0, visible:true, ease:Linear.easeNone}))

    stop();
}

function onTimer(event:TimerEvent):void
{
    doStuff();
}

var myTimer:Timer = new Timer(15000, 3);
myTimer.addEventListener(TimerEvent.TIMER, onTimer);
myTimer.start();
doStuff();

【讨论】:

  • 你就是男人!你和 Marcela 正在激烈竞争,成为所有堆栈溢出的至高无上的闪电知识冠军,我只希望它不会以一场生死攸关的动作剧本而告终。再次感谢大家。
【解决方案2】:

如果你想调用 doStuff 3 次,间隔 15 秒,请从 doStuff 内部删除对 setTimeout 的调用,然后执行以下操作:

var stuffTimer:Timer = new Timer(15000, 2);
stuffTimer.addEventListener(TimerEvent.TIMER, doStuff)
doStuff(null);
stuffTimer.start();

您需要更改您的 doStuff 方法以接受 TimerEvent:

function doStuff(e:TimerEvent):void
{
    [...]
}

不相关,您应该将您的导入移出doStuff 方法,并将它们与您的第一个导入语句组合在一起。

【讨论】:

  • 再次返回以挽救这一天。谢谢我将我的导入语句组合在一起,这对我来说应该是常识。现在每次尝试这部电影时,我都会收到错误“1136:参数数量不正确。预期为 1”,它指的是第 75 行(pastebin.com/muHcntt5
  • 您需要使用 doStuff(null); 调用您的方法,因为它需要一个参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多