View Single Post
Sponsorlu Bağlantılar
Zoque.Forum
Advertisement
Old 26.04.2008   #2 (permalink)
Gazing
 
Üyelik Tarihi: 22.09.2007
Yer: İzmir
Yaş: 17
Mesaj: 30
Re: AS3 - Sürekli akan galaksi zemin

İ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:
PHP Code:
var 0;
var 
sayi Math.round(stage.stageWidth);
function 
gl() {
    for (
i0i<sayii++) {
        var 
yildiz:Sprite = new Sprite();
        
yildiz.graphics.beginFill(0xffffbb);
        
yildiz.graphics.drawCircle(00Math.random()*1);
        
yildiz.xMath.random()*stage.stageWidth;
        
yildiz.yMath.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:

PHP Code:
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:

PHP Code:
var yildiz_liste:Array = new Array();
//
var 0;
var 
sayi Math.round(stage.stageWidth);
function 
gl() {
    for (
i0i<sayii++) {
        var 
yildiz:Sprite = new Sprite();
        
yildiz.graphics.beginFill(0xffffbb);
        
yildiz.graphics.drawCircle(00Math.random()*1);
        
yildiz.xMath.random()*stage.stageWidth;
        
yildiz.yMath.random()*stage.stageHeight;
        
yildiz.alpha=Math.random()*1;
        
///
        
yildiz_liste.push([yildiz,Math.random()*4+1]);
        
///
        
this.addChild(yildiz);
    }
}
function 
akis(e:Event) {
    for (
i0i<yildiz_liste.lengthi++) {
        
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...
Gazing şu an çevrimdışı   Mesajdan alıntı yaparak yeni bir cevap ekleyin