ActionScript ve 3D Menu Yapımı
Yağız Gürgül Tarih: 17/06/2007 Yorum: 1 adet
Okunma : 1025 Tutanlar: Bu yazıyı 1 kişi tuttu.
Önceki makalemde birim çemberdeki sin ve cos ile dairesel hareketler yapmayı öğrenmiştik. Şimdi ise bunu kullanarak ve birazcık daha geliştirerek persfektif 3D menu yapıcağız. Öncelikle yeni bir Flash dosyası açın ve içine bir daire çizin. Bu daireyi seçin ve movieclip haline getirin.
Bu movieclip’in instance name = top_mc olsun.
Frame kodlarımızda karışıklılığı önlemek için prototype kullanıcagız.
Örnek kod:
MovieClip.prototype.saydamlik = function(a:Number)
{
this._alpha=a;
};
Bu fonksiyonumuz sadece movieclip’lere uygulanılır ve _global‘dir.
Örnek kullanım:
top_mc.saydamlik(10);
Gördüğünüz gibi Movieclip’ten sonra "." işareti konur ve fonksiyon öyle yazılır.Bu bize çok kolaylık sağlar…
Frame kodlarımızı silelim ve şunları yazalım:
Kod:
MovieClip.prototype.dondur = function(aci:Number) {
this.i = aci;
this.onEnterFrame = function() {
this.i += (_root._xmouse-(Stage.width/2))/1500;
this._yscale = this._xscale=this._y/((Stage.height/2)+y_oran)*100;
this._x = (Math.sin(this.i)*x_oran)+Stage.width/2;
this._y = (Math.cos(this.i)*y_oran)+Stage.height/2;
updateAfterEvent();
this.swapDepths(this._y);
};
};
Evet şimdi bu kodumuza bir bakalım.Bu kodumuzda; movieclip içindeki i degerini fonksiyon parametresi olan aci degerine eşitliyoruz.Ardından onEnterFrame ile döngüye sokup kullanacagımız movieclip içindeki i degerini mousun hareketine göre arttırıp azaltıyoruz.
this._yscale = this._xscale=this._y/((Stage.height/2)+y_oran)*100;
Bu satırda movieclip’imizin genişligini ve yüksekligini eşitliyoruz.Nede olsa bu movieclip bir top oldugundan öyle olması gerekiyor (*1)
Movieclip’in x ve y kordinatlarını sin ve cos fonksiyonlarını kullanarak belirliyoruz ki zaten bunu daha önceki makalemde açıklamıştım.
Ardından updateAfterEvent(); kodunu kullanarak sahneyi yeniliyoruz.Bu bize daha akışkan bir görüntü sağlıyor…
Son olarak movieclipin digerlerinin önünde ya da arkasında oldugunu movieclip’in y kordinatına bağlı olarak değiştiriyoruz.(*2)
Tüm bu açıklamalardan sonra kodumuza şu satırları ekliyelim:
Kod:
top_mc._visible = false;
toplam_top = 15;
x_oran=100;
y_oran=50;
for (i=0; i<=toplam_top; i++) {
aci = (360/toplam_top)/(180/Math.PI)*i;
var yeni_top:MovieClip = top_mc.duplicateMovieClip("top"+i, i);
yeni_top._x = (Math.sin(aci)*x_oran)+Stage.width/2;
yeni_top._y = (Math.cos(aci)*y_oran)+Stage.height/2;
yeni_top.dondur(aci);
}
Burada ilk başta top_mc‘imizi görünmez yapıyoruz; çünkü ona komut vermiyeceğiz.
For döngüsü ile toplam_top degeri kadar i sayısını arttırıyoruz.
Ardından aci degerini Flash’ın kullandıgı radyan biriminden derece birimine çeviriyoruz.Bu bize çalışmanın başlangıcındaki tüm topların 3D olarak sıralanmasını sağlayacak.
Yeni bir top yaratıp bunun x ve y kordinatlarını daha önce buldugumuz aci degerini sin ve cos fonksiyonlarını içine yazarak buluyoruz.
Bu aci degeri movieclip’e uygulayacagımız dondur fonksiyonunun parametresine yazıyoruz ve bu fonksiyonu çalıştırıyoruz.
Tüm frame kodumuz:
Kod:
MovieClip.prototype.dondur = function(aci:Number) {
this.i = aci;
this.onEnterFrame = function() {
this.i += (_root._xmouse-(Stage.width/2))/1500;
this._yscale = this._xscale=this._y/((Stage.height/2)+y_oran)*100;
this._x = (Math.sin(this.i)*x_oran)+Stage.width/2;
this._y = (Math.cos(this.i)*y_oran)+Stage.height/2;
updateAfterEvent();
this.swapDepths(this._y);
};
};
top_mc._visible = false;
toplam_top = 15;
x_oran=100;
y_oran=50;
for (i=0; i<=toplam_top; i++) {
aci = (360/toplam_top)/(180/Math.PI)*i;
var yeni_top:MovieClip = top_mc.duplicateMovieClip("top"+i, i);
yeni_top._x = (Math.sin(aci)*x_oran)+Stage.width/2;
yeni_top._y = (Math.cos(aci)*y_oran)+Stage.height/2;
yeni_top.dondur(aci);
}
Evet çalıştırdınızda mous hareketine göre 3D bir görünüm sergileyecektir.
(*) Satırları tekrar açıklıyacağım.Çünkü bu satırlar tüm çalışma kodları yazılmadan açıklanamaz…
Çalışmaya baktıgınızda movieclip’lerin sanki bri derinligi var.Evet bu derinlik aslında movieclip’in sadece y kordinatının değişmesi ve bu değişikligi ile büyümesinden ibaret.Peki biz nasıl derinligi sağlıyoruz?
(*1)
this._y/((Stage.height/2)+y_oran)*100;
Bu satırımızda movieclip’imizin y kordinatında çıkabilecegi en yüksek nokta Çalışma sahnesinin ortasından y_oran kadar fazlasıdır.İşte bu noktada işin içine matematikteki doğru orantı giriyor.
Örnek olarak: bizim elimizde 30 sayısı ile 600 sayısı olsun.Bunu %100 bakımıdan yazmamız için: 30/600*100 satırını kullanırız.
this._y/((Stage.height/2)+y_oran)*100;
Bu satırda benzetmek yapmak istersek this.y = 30 ve ((Stage.height/2)+yoran) = 600 olmuş oluyor.
Bu y kordinatından alacagımız, en düşük 0 en yüksek 100 sayı degerini xscale yscale değişkenlerine bağlayarak y kordinatı azaldıkça boyutunu da küçültüyoruz.
(*2) Persfektif konusunda bize en yakın obje herşeyin önündedir.Burada bu mantığı kullanacağız. Çalışmanızı uzun uzun incelerseniz.Aslında bize en yakın objenin y kordinatı degeri de en büyüktür
Buna bağlı olarak depth(derinlik) degerini y kordinatına bağlıyoruz. Böylece y kordinatı büyük olan yani bize en yakın olan en önde olmuş oluyor…
Biraz uzun oldu ama umarım anlatabilmişimdir.
Kolay gelsin…
Haber
MMIstanbul Adobe UG
ColdFusion, Flex, AIR, Flash, PDF, Dreamweaver, Fireworks, Photoshop, Illustrator, iNdesign, Premiere, Soundbooth, Lightroom, InCopy, JRun, LiveCycle, Acrobat, AfterEffects, Resmi Adobe Kullanıcı Grubu.
Etkinlikler
Konferans
IBM Yazılım Zirvesi '08, Değişim Açlığı
IBM Yazılım Zirvesi '08, Değişim Açlığı
Değişim açlığı, Hungry for Change teması çerçevesinde düzenlenecek IBM Yazılım zirvesi Ankara ve İstanbulda düzenlenecek:
15 Ekim 2008
Swissotel the...
Kategori:
Konferans
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 315 (4 kayıtlı, 311 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Neler Yapılabilir?
Yeni bir portal, 30 civarında online / offline etkinlik, seminer vb rağmen MMIstanbul sanıyoruz ki halen hakettiği ilgiyi göremedi. " ...
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)
Ne Nedir Kampanyası Başlıyor!
Çok Merak Edenler için; MMIstanbul Geliştirme Ekibi ve Çalışma Ortamımız





çok gzl anlatmışsın çok teşekkürler fakat ben bi yerdemi yanlışlık yaptım bilmiyorum xoran yoran ve i lerin hepsine tanımlanmamış dedi :S