İstediğiniz iki yöntemle yapılır.Hatta ikinci yöntemde class kullanarak "OOP yaptım ha" diyerek hava bile atabilirsiniz
Öncelikle en basit yöntem:
var i = 0;
var sayi = Math.round(stage.stageWidth);
function gl() {
for (i= 0; i<sayi; i++) {
var yildiz:Sprite = new Sprite();
yildiz.graphics.beginFill(0xffffbb);
yildiz.graphics.drawCircle(0, 0, Math.random()*1);
yildiz.x= Math.random()*stage.stageWidth;
yildiz.y= Math.random()*stage.stageHeight;
yildiz.alpha=Math.random()*1;
////
yildiz.addEventListener(Event.ENTER_FRAME,akis);
///
this.addChild(yildiz);
}
}
function akis(e:Event) {
e.target.y+=5;
if (e.target.y>stage.stageHeight) {
e.target.y=0;
}
}
gl();
Gördüğünüz gibi yildiz objesine event ekliyoruz.Burada çok önemli olan akis fonksiyonunda yildiz objesine ulaşmak için Event.target kodunu kullanmamız.Bu bir nevi AS2'deki:
obje.onEnterFrame = function() {
this._x+=4;
}
kodundaki this bölümündeki koddur. Çalışmanızı test ederseniz görüntü sürekli akar.Ama gökyüzündeymiş havası vermez çünkü gökyüzünde ilerlerken tüm yıldızlar aynı hızda akmaz.
Yani gene tüm yıldızlara random akış hızı vermemiz gerek.Peki nasıl? Çünkü Sprite içine değişken alamıyor? İşte burada işin içine ya iki boyutlu array ya sınıf ya da object giricek.Ben aşağıdaki kodda array kullandım:
var yildiz_liste:Array = new Array();
//
var i = 0;
var sayi = Math.round(stage.stageWidth);
function gl() {
for (i= 0; i<sayi; i++) {
var yildiz:Sprite = new Sprite();
yildiz.graphics.beginFill(0xffffbb);
yildiz.graphics.drawCircle(0, 0, Math.random()*1);
yildiz.x= Math.random()*stage.stageWidth;
yildiz.y= Math.random()*stage.stageHeight;
yildiz.alpha=Math.random()*1;
///
yildiz_liste.push([yildiz,Math.random()*4+1]);
///
this.addChild(yildiz);
}
}
function akis(e:Event) {
for (i= 0; i<yildiz_liste.length; i++) {
yildiz_liste[i][0].y+=yildiz_liste[i][1];
if(yildiz_liste[i][0].y>stage.stageHeight) {
yildiz_liste[i][0].y=0;
}
}
}
gl();
addEventListener(Event.ENTER_FRAME,akis);
Bu arada ufak bir hatırlatma.Değişkenleri mutlaka fonksiyon dışında tanımlayın.İleride çok işinize yarayacaktır.
Ufak bir hatırlatma daha:
Sprite seçimi bu çalışma için performanslı bir seçim değil.Çünkü siz bu yıldızları sadece çizim amaçlı kullanıcaksınız.Bu durumda Sprite değil Shape daha uygun.Shape kullanırsanız
flash üzerine daha az yük biner.
Kolay gelsin...