Flash AS3 таймер вопрос - PullRequest
       8

Flash AS3 таймер вопрос

4 голосов
/ 02 марта 2009

У меня есть timerEvent, который добавляет 25 видеороликов на сцену и анимирует их с x: 0, y: 0, все это отлично работает! То, что я хотел бы сделать, это назначить каждому мувиклипу значение y на 25 пикселей больше, чем последний мувиклип, добавленный на сцену. Я провел небольшой тест, пытаясь увеличивать числовое значение каждый раз, когда таймер делал цикл, но он не увеличивался. Должен ли я использовать для цикла / массива тоже?

Заранее спасибо. 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);
    }
}

Ответы [ 4 ]

3 голосов
/ 03 марта 2009

Честно говоря, я бы изначально все это настроил с помощью цикла for. Когда вы закончите цикл for, разместите каждый элемент соответствующим образом, затем используйте TweenLite или ваш любимый пакет 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.
        }
    }
}

Важно отметить, что обновления экрана НЕ происходят внутри блоков кода, таких как циклы for и while. Вы не могли бы расположить их на основе друг друга так, как я показал, потому что, хотя предыдущие элементы x, возможно, только что были установлены, они не были отображены на экране; Чтобы построить систему, в которой, скажем, все изображения не имеют одинаковую ширину, но одно должно начинаться за другим, мы должны дождаться события Event.COMPLETE для данного загрузчика, чтобы мы могли получить доступ к его ширине и другим параметрам. атрибутов. Поскольку вы просто хотели разнести их на 25 пикселей друг от друга, и они имеют одинаковый размер, мы просто используем «i» для их разделения

Что происходит: i * 25 = 0; я ++; i * 25 = 25; я ++; я * 25 = 50;

Как вы можете видеть, мы достигли искомого расстояния.

Брайан Ходж
hodgedev.com blog.hodgedev.com

2 голосов
/ 14 августа 2015

используйте это:

 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);
    }
}
0 голосов
/ 02 марта 2009

Я действительно другой подход мог бы использовать свойство delay метода Tweener.addTween. Инициировать все мувиклипы и немного увеличить задержку для каждого?

0 голосов
/ 02 марта 2009

На самом деле не удалось найти часть, где вы пытались увеличить переменную или добавить 25px к y, но попробуйте это:

function itemTimer_tick(e:TimerEvent):void {

    ...

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

    ...

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...