Pergunta

Eu tenho um timerEvent que adiciona 25 movieclips para o palco e anima-los de x: 0, y: 0, esta tudo bem funciona! O que eu gostaria de fazer é atribuir a cada clipe de filme um valor y de 25px mais do que a última movieClip adicionado ao palco. Eu fiz um pequeno teste, tentando incrementar um valor de número cada vez que o temporizador fez um loop mas didnt incremento. Deveria eu estar usando um loop for / array também?

Obrigado antecipadamente. 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);
    }
}
Foi útil?

Solução

Honestamente, eu teria criado isso tudo inicialmente com um loop for. Depois de ter terminado o seu ciclo for, colocando cada item em conformidade, em seguida, usar TweenLite, ou seu pacote favorito Tweening.

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

É importante notar que atualizações de tela não acontecem dentro de blocos de código como for e while loops. Você não poderia espaço estes baseado em uns aos outros da maneira que eu mostrei porque mesmo que os itens anteriores x pode ter sido apenas set, ele não foi desenhado para a tela; A fim de construir um sistema onde dizem que todas as imagens não são a mesma largura, mas deve-se começar após o outro, temos de esperar para o evento Event.COMPLETE ao fogo para o carregador dada, para que possamos acessá-lo de largura e outra atributos. Desde que você só queria espaço-los 25 pixels de distância, e eles são do mesmo tamanho, nós simplesmente usar "i" para separá-los

O que está acontecendo: i * 25 = 0; i ++; i * 25 = 25; i ++; i * 25 = 50;

Como você pode ver, temos alcançar o espaçamento que estávamos procurando.

Brian Hodge
hodgedev.com blog.hodgedev.com

Outras dicas

usar este:

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

Realmente não localizar a parte em que você tentou incrementar uma variável ou adicionar 25px de y, mas tente o seguinte:

function itemTimer_tick(e:TimerEvent):void {

    ...

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

    ...

}

I abordagem realmente diferente poderia ser usar a propriedade delay do método Tweener.addTween. Iniciar todos os movieclips e aumentar o atraso para cada um apenas um pouco?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top