Frage

Ich habe eine timerevent bekam die 25 Videoclips auf der Bühne ergänzt und belebt sie von x: 0, y: 0, das alles funktioniert gut! Was ich möchte, ist tun zuweisen jeder Film einen y-Wert von 25px mehr Clip als die letzte Movieclip auf der Bühne hinzugefügt. Ich habe einen kleinen Test, indem Sie versuchen einen Zahlenwert jedesmal, wenn der Timer hat eine Schleife zu erhöhen, aber es hat nicht Schritt. Soll ich auch eine for-Schleife / Array verwenden?

Vielen Dank im Voraus. Jono

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);
    }
}
War es hilfreich?

Lösung

Ehrlich gesagt würde ich für Schleife mit einem all up zunächst eingestellt haben. Sobald Sie Ihre for-Schleife beendet haben, jedes Element platzieren entsprechend, dann verwenden TweenLite oder Ihre Lieblings Tweening Paket.

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.
        }
    }
}

Es ist wichtig, dass die Bildschirm-Updates innerhalb Codeblöcke wie und While-Schleifen nicht passieren zu beachten. diese konnte man nicht Raum basierend auf sich in der Art und Weise, die ich gezeigt habe, weil, obwohl der vorherigen Artikel x gerade eingestellt worden sein, es ist nicht zu Bildschirm gezeichnet worden; Um ein System zu bauen, wo sagt alle Bilder nicht die gleiche Breite sind, noch muss man nach der anderen beginnen, müssen wir für das Event.COMPLETE Ereignis warten, bis die gegebenen Lader zu feuern, so dass wir seine Breite und andere zugreifen Attribute. Da Sie gerade auf Platz 25 Pixel auseinander sie wollten, und sie haben die gleiche Größe, wir nur verwenden „i“, um sich zu trennen

Was geschieht: i * 25 = 0; i ++; i * 25 = 25; i ++; i * 25 = 50;

wie Sie sehen können wir erreichen, haben den Abstand wir suchen.

Brian Hodge
hodgedev.com blog.hodgedev.com

Andere Tipps

verwenden:

 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);
    }
}

Haben lokalisieren nicht wirklich den Teil, wo man versucht, eine Variable zu erhöhen oder 25px y hinzuzufügen, aber versuchen Sie dies:

function itemTimer_tick(e:TimerEvent):void {

    ...

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

    ...

}

ich wirklich anderen Ansatz könnte sein, die delay Eigenschaft der Tweener.addTween Methode zu verwenden. Initiieren Sie alle Videoclips und erhöhen die Verzögerung für jeden nur ein kleines bisschen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top