2009-03-02 68 views
4

我有一个timerEvent,将25个影片剪辑添加到舞台上,并从x:0,y:0对它们进行动画处理,这一切都正常!我想要做的是为每个影片剪辑分配比上一次添加到舞台上的影片剪辑多25px的y值。我做了一个小测试,试图在每次定时器执行循环时增加一个数值,但它没有增加。我应该使用for循环/数组吗?Flash AS3计时器问题

在此先感谢。 城野

import flash.events.*; 
import caurina.transitions.*; 

bringItemsOn(); 

var itemTimer:Timer; 
function bringItemsOn():void { 
    itemTimer=new Timer(300); 
    itemTimer.addEventListener(TimerEvent.TIMER,itemTimer_tick); 
    itemTimer.start(); 
} 

function itemTimer_tick(e:TimerEvent):void {  
    itemTimer.currentCount-1; 
    var mc:MovieClip = new MovieClip(); 
    mc.graphics.beginFill(Math.random() * 0x000000); 
    mc.graphics.drawRect(0,0,stage.stageWidth,25); 
    mc.x=0; 
    mc.y=0; 
    addChild(mc); 
    Tweener.addTween(mc,{y:Math.random()*1000 - 500, 
          x:0, 
          time:.9, 
          transition:"easeOutExpo"}); 

    if (itemTimer.currentCount>=25) { 
     itemTimer.removeEventListener(TimerEvent.TIMER,itemTimer_tick); 
    } 
} 
+0

Tweener.addTween(MC,{Y:mc.y + 50中,x:0,时间:0.9,过渡: “easeOutExpo”}); 如果我添加/使用了一个for循环,我可以引用每个对象并分配mc [i] + 50,所以只是想知道我是否可以集成 – Jono 2009-03-02 11:38:03

回答

3

老实说,我会设置这一切最初与for循环。完成for循环后,相应地放置每个项目,然后使用TweenLite或您最喜欢的补间包。

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 

    import gs.TweenLite; 
    import gs.easing.*; 

    public class ExampleDocumentClass extends Sprite 
    { 
     if(stage) _init(); 
     else addEventListener(Event.ADDED_TO_STAGE, _init(), false, 0, true); 
    } 
    private function _init(e:Event =null):void 
    { 
     for(var i:int = 0; i < 25; i++) 
     { 
      var mc:MovieClip = new MovieClip(); 
      mc.graphics.beginFill(Math.random() * 0x000000); 
      mc.graphics.drawRect(0,0,stage.stageWidth,25); 
      //Seperates them by 25, their width, so they will touch. 
      mc.x= i * 25; //i * 25 + 1 leaves a space in between. 
      mc.y=0; 
      addChild(mc); 
      TweenLite.to(mc, 0.9, {y:math.random()*1000-500, x: 0, ease: Expo.easeOut}); 

     if(i == 24) //Total length - 1 
     { 
      //The loop ended. 
     } 
    } 
} 

重要的是要注意屏幕更新不会发生在诸如for和while循环之类的代码块中。你不能以我已经显示的方式将这些基于彼此进行空间分配,因为即使先前的项目x可能刚刚设置了,它也没有被绘制到屏幕上;为了构建一个说所有图像宽度不一样的系统,我们必须等待Event.COMPLETE事件触发给定的加载器,以便我们可以访问它的宽度和其他属性。由于您只是想将它们的间距设置为25像素,并且它们大小相同,我们只是使用“我”来分隔它们。

最新情况: i * 25 = 0; i ++; i * 25 = 25; i ++; i * 25 = 50;

正如你所看到的,我们已经达到了我们要找的间距。

布赖恩霍奇
hodgedev.com blog.hodgedev.com

0

没有真正找到了一部分,你想增加一个变量或添加25px的为y,但试试这个:

function itemTimer_tick(e:TimerEvent):void { 

    ... 

    mc.y = itemTimer.currentCount * 25; 
    addChild(mc); 

    ... 

} 
+0

Thanks dude!这就是我使用currentCount * jobbie作为变量的地方var var mcFinal:Number =(itemTimer.currentCount * 50); Tweener.addTween(mc,{y:mcFinal,x:0,time:.9,transition:“easeOutExpo”}); 将其排序出来!谢谢一堆! – Jono 2009-03-02 11:49:12

+0

你知道,你也应该接受答案,如果它是可以接受的话:) – kkyy 2009-03-02 11:53:49

+0

哎呀,对不起这个游戏新! – Jono 2009-03-02 12:02:31

0

我真的很不同的方法可以是使用delayTweener.addTween方法的性质。启动所有影片剪辑并只增加一点点延迟?

2

使用这样的:

import flash.events.*; 
import caurina.transitions.*; 

bringItemsOn(); 

var extra:int = 0; 
var itemTimer:Timer; 
function bringItemsOn():void { 
    itemTimer=new Timer(300); 
    itemTimer.addEventListener(TimerEvent.TIMER,itemTimer_tick); 
    itemTimer.start(); 
} 

function itemTimer_tick(e:TimerEvent):void {  
    itemTimer.currentCount-1; 
    var mc:MovieClip = new MovieClip(); 
    mc.graphics.beginFill(Math.random() * 0x000000); 
    mc.graphics.drawRect(0,0,stage.stageWidth,25); 
    mc.x += extra; 
    mc.y=0; 
    extra = mc.width; 
/*u can use mc's width for different x value's or 

make ur own like extra += 10; each mc.x will be different */ 
    addChild(mc); 
    Tweener.addTween(mc,{y:Math.random()*1000 - 500, 
          x:0, 
          time:.9, 
          transition:"easeOutExpo"}); 

    if (itemTimer.currentCount>=25) { 
     itemTimer.removeEventListener(TimerEvent.TIMER,itemTimer_tick); 
    } 
}