Question

J'ai un timerEvent qui ajoute 25 MovieClips à la scène et les anime à partir de x: 0, y: 0, tout cela fonctionne bien! Ce que je voudrais faire, c'est assigner à chaque clip une valeur y de 25px de plus que le dernier movieClip ajouté à la scène. J'ai fait un petit test en essayant d'incrémenter une valeur numérique à chaque fois que la minuterie faisait une boucle, mais elle ne s'incrémentait pas. Devrais-je utiliser une boucle / tableau aussi?

Merci d'avance. 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);
    }
}
Était-ce utile?

La solution

Honnêtement, j'aurais tout réglé au départ avec une boucle for. Une fois votre boucle for terminée, placez chaque élément en conséquence, puis utilisez TweenLite ou votre forfait Tweening préféré.

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

Il est important de noter que les mises à jour d'écran NE se produisent PAS dans les blocs de code tels que les boucles for et while. Vous ne pouvez pas les espacer les uns par rapport aux autres de la manière que j’ai montrée car même si les éléments précédents x venaient d’être définis, ils n’ont pas été dessinés à l’écran; Afin de construire un système où toutes les images n’ont pas la même largeur, mais qu’il faut commencer les unes après les autres, il faut attendre que l’événement Event.COMPLETE se déclenche pour le chargeur donné, de manière à pouvoir accéder à sa largeur et à d’autres. les attributs. Puisque vous vouliez simplement les espacer de 25 pixels et qu’ils ont la même taille, nous utilisons simplement "i". pour les séparer

Que se passe-t-il? i * 25 = 0; i ++; i * 25 = 25; i ++; i * 25 = 50;

comme vous pouvez le constater, nous avons obtenu l’espacement que nous recherchions.

Brian Hodge
hodgedev.com blog.hodgedev.com

Autres conseils

utiliser ceci:

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

N'a pas vraiment localisé la partie où vous avez essayé d'incrémenter une variable ou d'ajouter 25 px à y, mais essayez ceci:

function itemTimer_tick(e:TimerEvent):void {

    ...

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

    ...

}

L’approche vraiment différente pourrait consister à utiliser la propriété delay de la méthode Tweener.addTween . Commencer tous les MovieClips et augmenter le délai pour chacun juste un peu?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top