2009-03-02 9 views
4

私は25のムービークリップをステージに追加し、x:0、y:0からアニメーション化するtimerEventを取得しました。私がしたいのは、ステージに追加された最後のムービークリップよりも25ピクトの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を割り当てることができるので、toを統合することができますか? – Jono

答えて

3

正に、私はこれを最初にforループですべて設定していたでしょう。 forループが終了したら、それに応じて各項目を配置し、TweenLiteまたはお気に入りのTweening Packageを使用します。

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」を使用して区切ります。

何が起こっているか: i * 25 = 0; i ++;i * 25 = 25; i ++;i * 25 = 50;

ご覧のとおり、私たちが探していたスペースを達成しています。

ブライアンホッジ
hodgedev.comblog.hodgedev.com

+0

それはそれを行う良い方法です!また、すべてのオブジェクトを簡単にアクセス可能にし、クリックイベントなどを参照する...ありがとう! – Jono

0

が本当にあなたは、変数をインクリメントまたはyに25ピクセルを追加しようとした部分を見つけ、これをしようとしなかった。

function itemTimer_tick(e:TimerEvent):void { 

    ... 

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

    ... 

} 
+0

ありがとう!それは私が現場で現金を使っていたものです。 var mcFinal:Number =(itemTimer.currentCount * 50); Tweener.addTween(mc、{y:mcFinal、x:0、time:.9、transition: "easeOutExpo"}); それはすぐにソートされました!本当にありがとう! – Jono

+0

あなたが知っている、あなたはまた、それが受け入れられた場合、答えを受け入れる必要があります:) – kkyy

+0

おっと、このゲームには申し訳ありません! – Jono

0

私は本当に異なるアプローチがdelayを使用することができプロパティを変更することができます。すべてのムービークリップを開始し、少しずつ遅れを増やしますか?

+0

もちろん、forループを使用する場合、iはdelayをi * delayDifferenceに設定するだけです。 –

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); 
    } 
} 
関連する問題