Система частиц на AS3, с использованием flash, проблема с копированием элемента частиц

Я разрабатываю очень простую систему частиц в AS3, у меня есть частица (мувиклип) и поведение частицы, но теперь мне нужен хороший способ дублировать ее n раз и изменить единственное значение, определяющее поведение системы, ширину , от 10 до 100 пикселей.

Это код:

//some declarations
var blur:BlurFilter = new BlurFilter();
var filterArray:Array = new Array(blur);
import fl.transitions.Tween;
import fl.transitions.easing.*;

//the only input value, from 10 to 100
par.width=100;
//the equations that define the behavior.
par.alpha=.0088*par.width+.98;
par.height=par.width;
blur.blurX = .75*par.width-.55;
blur.blurY = blur.blurX;
blur.quality = 1;
par.filters = filterArray;
//the movement of the particle
var myTween:Tween = new Tween(par, "y", Strong.easeOut, par.y, stage.stageHeight+2*par.height, -.2*par.width+22, true); 

Итак, как видите, par — это имя экземпляра частицы, ну, мне нужно продублировать его, изменив значение .width и, в конечном итоге, значение .x. Есть идеи? Спасибо!


person DomingoSL    schedule 11.01.2011    source источник


Ответы (1)


Это и есть ООП (объектно-ориентированное программирование), и Flash — отличный тому пример.

package  {

    import flash.filters.BlurFilter;
    import fl.transitions.Tween;
    import fl.transitions.easing.*;
    import flash.display.MovieClip;
    import flash.events.Event;

    public class Particle extends MovieClip {

        public function Particle() {
            // constructor code
            //some declarations
            this.graphics.beginFill(0, 1);
            this.graphics.drawCircle(0, 0, 50);
            var blur:BlurFilter = new BlurFilter();
            var filterArray:Array = new Array(blur);
            //the only input value, from 10 to 100
            this.width = Math.round(Math.random() * 90) + 10;
            //the equations that define the behavior.
            this.alpha = .0088 * this.width + .98;
            this.height = this.width;
            blur.blurX = .75 * this.width - .55;
            blur.blurY = blur.blurX;
            blur.quality = 1;
            this.filters = filterArray;
            this.addEventListener(Event.ADDED_TO_STAGE, __tweenMe);
        } 


        private function __tweenMe($evt:Event):void {
            //the movement of the particle
            var myTween:Tween = new Tween(this, "y", Strong.easeOut, this.y, stage.stageHeight+2*this.height, -.2*this.width+22, true); 
        }

    }

}

а затем в вашем DocumentClass вы можете сделать что-то вроде этого:

package  {

    import flash.display.MovieClip;

    public class BaseClass extends MovieClip {

        public function BaseClass() {
        var par:Particle;
            for ( var i:int = 0; i < 100; i++) {
                par = new Particle();
                addChild(par);
            }       
        }   
    }    
}

ИЗМЕНИТЬ

Вот вам http://d.pr/ycUh. Дайте мне знать, если у вас есть вопросы о том, что происходит. Я добавил несколько случайных значений x и y для начальных позиций ваших частиц.

person sberry    schedule 11.01.2011
comment
извините, но это очень сложно для моего уровня AS3, это (d.pr/ZiW9) мой .fla с вашими изменениями, но я не могу создать более одной частицы, большое спасибо! - person DomingoSL; 11.01.2011
comment
См. мое редактирование для ссылки droplr на ваши измененные файлы. - person sberry; 11.01.2011