Zoque.Forum
Dirsek Teması:
Geri Dön Zoque.Forum » Tasarımcının Mutfağı » Flash, Director, Live Motion » AS3 - Sürekli akan galaksi zemin


Flash, Director, Live Motion Flash, Director, Live Motion hakkında sorularınızı ve merak ettiklerinizi burada yer verebilirsiniz.

Yanıt
 
LinkBack Seçenekler
Old 25.04.2008   #1 (permalink)
MGoktas
 
MGoktas's Avatar
 
Üyelik Tarihi: 26.01.2007
Yer: Kayseri
Mesaj: 322
Görsel: 17
AS3 - Sürekli akan galaksi zemin

AS3'te yeniyim. Hoş AS2'de de çok eskilerden değilim de
En azından AS2 de bildiklerimi AS3'e aktarabildim.

Siyah zemin üzerinde beyaz noktalardan oluşan basit bir galaksi görünümü oluşturmaya çalışıyorum. Sabit olarak değil de yavaş yavaş ilerliyor hissi veren bir görüntü. Biraz fade in yöntemi sanırım...

Aslında help konusundan yardımları kurcalayarak çeşitli yöntemleri deneyerek öğrenmeye çalışıyorum fakat doğru yöntemle oluşturduğuma emin olamadığım için sorma ihtiyacı hissettim.

Kodlarım şu şekilde başlıyor:

PHP Code:
function gl() {
    var 
0;
    var 
sayi Math.round(stage.stageWidth);
    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;
        
bos.addChild(yildiz);
    }

Buraya kadar istediğim görüntü tamam. Alpha ve büyüklük değerlerini istediğim ölçüde elde ediyorum bu şekilde.
Bu görüntünün akmasını istiyorum, yani izleyenin açısından bakınca ilerliyormuş gibi bir his.
Bunu sistemi fazla kasmadan yapabilecek bir yöntem aradım, bulamadım.
...
MGoktas şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 26.04.2008   #2 (permalink)
Gazing
 
Üyelik Tarihi: 22.09.2007
Yer: İzmir
Yaş: 16
Mesaj: 27
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ışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 26.04.2008   #3 (permalink)
MGoktas
 
MGoktas's Avatar
 
Üyelik Tarihi: 26.01.2007
Yer: Kayseri
Mesaj: 322
Görsel: 17
Re: AS3 - Sürekli akan galaksi zemin

Gazing teşekkürler yardımın için.

-Çalışmaya gelmeden önce, değişkenlerle ilgili önerinin ne kadar önemli olduğunu bir öncek arapsaçı gibi yaptığım işte anladım İçinden çıkamıyorum şimdi.

-Sprite yerine Shape kullanmak için new Sprite yerine new Shape dememiz yeterli mi, yoksa ona göre diğer özellikler için yapacağımız ayrı bir kod var mı?

Çalışmamıza gelince, istediğim sürekli akım özellikle iki boyutlu array yöntemiyle gayet güzel. Fakat sorun şu ki yukarı doğru değil ilerliyormuş hissiyle akmasını istiyorum Yani 3D gibi biraz... Yıldızları büyüterek mi ulaşırız bu görüntüye ya da nasıl bir yöntem olabilir. Büyüyen yıldızların büyümesini de biryerde durdurup, sıfırlamak ya da silip yeni yıldızlar eklemek mi lazım bilemiyorum işte hangi yöntemi kullanacağımı.

...
MGoktas şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 26.04.2008   #4 (permalink)
Gazing
 
Üyelik Tarihi: 22.09.2007
Yer: İzmir
Yaş: 16
Mesaj: 27
Re: AS3 - Sürekli akan galaksi zemin

Birazcık matematik ile:
PHP Code:
var yildiz_liste:Array = new Array();
//
var yK:Number
var xK:Number
//
var i:uint 0;
var 
sayi:uint Math.round(stage.stageWidth)
function 
gl() {
    for (
i0i<sayii++) {
        var 
yildiz:Shape = new Shape();
        
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;
        
///
        
xK=(yildiz.x-stage.stageWidth/2)/stage.stageWidth
        yK
=(yildiz.y-stage.stageHeight/2)/stage.stageHeight
        
///
        
yildiz_liste.push([yildiz,xK,yK]);
        
///
        
this.addChild(yildiz);
    }
}
function 
akis(e:Event) {
    for (
i0i<yildiz_liste.lengthi++) {
        
yildiz_liste[i][0].x+=yildiz_liste[i][1]*5
        yildiz_liste
[i][0].y+=yildiz_liste[i][2]*5
        
//
        
yildiz_liste[i][0].scaleX=yildiz_liste[i][0].scaleY=Math.sqrt((Math.abs(yildiz_liste[i][0].x-stage.stageWidth/2)*Math.abs(yildiz_liste[i][0].x-stage.stageWidth/2))+(Math.abs(yildiz_liste[i][0].y-stage.stageHeight/2)*Math.abs(yildiz_liste[i][0].y-stage.stageHeight/2)))/(stage.stageWidth/6)
        
//
        
if(yildiz_liste[i][0].scaleX>1.2) {
            
yildiz_liste[i][0].scaleX=yildiz_liste[i][0].scaleY=1.2;
        }
        if((
yildiz_liste[i][0].x>stage.stageWidth || yildiz_liste[i][0].x<0) || (yildiz_liste[i][0].y>stage.stageHeight || yildiz_liste[i][0].y<0)) {
            
yildiz_liste[i][0].x=stage.stageWidth/2
            yildiz_liste
[i][0].y=stage.stageHeight/2
            
//
            
yildiz_liste[i][1]=Math.random()-0.5
            yildiz_liste
[i][2]=Math.random()-0.5
        
}
        
yildiz_liste[i][0].visible = !Boolean(yildiz_liste[i][0].x==stage.stageWidth/2);
    }
}
gl();
addEventListener(Event.ENTER_FRAME,akis); 
Bu hale geldi Bu arada "Sprite" yerine "Shape" yazman yeterli ama yapabileceklerin kısıtlı olur. Bu konu hakkında blog sayfamda bir makale yazmıştım oraya bakabilirsin.
Gazing şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 26.04.2008   #5 (permalink)
MGoktas
 
MGoktas's Avatar
 
Üyelik Tarihi: 26.01.2007
Yer: Kayseri
Mesaj: 322
Görsel: 17
Re: AS3 - Sürekli akan galaksi zemin

Çok teşekkür ederim.
Biraz üzerinde çalışıp anlamam lazım
MGoktas şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 12.05.2008   #6 (permalink)
MGoktas
 
MGoktas's Avatar
 
Üyelik Tarihi: 26.01.2007
Yer: Kayseri
Mesaj: 322
Görsel: 17
Re: AS3 - Sürekli akan galaksi zemin

Yine iki soru[n] ile ben

1-Frame1'de yazılı olan kodların yeni bir keyframe açtığım Frame10'da çalışmaması gerekmez mi?

Mesela bu galaksi kodlarının arasında bir butona basınca gotoAndStop(10) kodu var.
Oraya gittiğinde sahnede 1. frame'den birşey kalmaması gerekiyor diye biliyorum ama bu kodlar hala çalışıyor 10. frame'de.


2-
PHP Code:
var sahneler:Array = ["SAHNE1 ","SAHNE2 ""SAHNE3 "]; 
dizininde sahne1 10. frame'de, sahne2 20, sahne3 de 30. frame de karşılığı olan butonların textleri.

PHP Code:
function hedehodo() {//yaa sürekli function, var, şu, bu ismi oluşturmaktan gına geldi
    
for (var i0i<sahneler.lengthi++) {
        var 
menu:Sprite = new Sprite();
        
menu.graphics.beginFill(0xffffff);
        
menu.graphics.drawRect(xxxx);
        
addChild(menu);
    }

Burada döngü içinde çoğaltılan menu Sprite'ına tıklandığında ilgili frame'e gitmesi için ne yazmamız gerekiyor?
Ya da bu yöntem yanlış mı?
Ya da çok basit bir şeydi de benim mi jeton düşmüyor saat çok geç oldu ondan galiba
MGoktas şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 12.05.2008   #7 (permalink)
cgencer
 
cgencer's Avatar
 
Üyelik Tarihi: 02.08.2001
Yer: istanbul
Yaş: 37
Mesaj: 1,530
Re: AS3 - Sürekli akan galaksi zemin

Gazing: ufak bir düzeltme... yukarda verdiğin kod, OOP sayılmaz. kendisi class yaratmıyor, inheritance vs yok... sadece objelere erişiyor ve event kullanıyorsun. bu haliyle interval kullanımından çok da bir farkı yok. yanlış anlama, ukalalık olarak söylemiyorum; arkadaş oop'u yanlış öğrenmesin.
__________________
obsesif v2 + daha iyi net + uçuca + facebook + linkedin
cgencer şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 12.05.2008   #8 (permalink)
Gazing
 
Üyelik Tarihi: 22.09.2007
Yer: İzmir
Yaş: 16
Mesaj: 27
Re: AS3 - Sürekli akan galaksi zemin

Alıntı:
cgencer tarafından gönderilen mesaj: Mesajı Görüntüle
Gazing: ufak bir düzeltme... yukarda verdiğin kod, OOP sayılmaz. kendisi class yaratmıyor, inheritance vs yok... sadece objelere erişiyor ve event kullanıyorsun. bu haliyle interval kullanımından çok da bir farkı yok. yanlış anlama, ukalalık olarak söylemiyorum; arkadaş oop'u yanlış öğrenmesin.
Hocam zaten OOP demedim ben o koda Sadece array yerine class kullanırsan OOP olabilir dedim
Gazing şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!