Profili Göster

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…

aç-kapa İçeriğin rss beslemesi kullanımda değil Yorumlar

Profili Göster
said güler 23/07/2008

ç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

MMIstanbul Adobe UG MMIstanbul Adobe UG

adobe user group

ColdFusion, Flex, AIR, Flash, PDF, Dreamweaver, Fireworks, Photoshop, Illustrator, iNdesign, Premiere, Soundbooth, Lightroom, InCopy, JRun, LiveCycle, Acrobat, AfterEffects, Resmi Adobe Kullanıcı Grubu.

yeni üyelik | şifremi unuttum

aç-kapa 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

aç-kapa Fuar Contemporary İstanbul Sanat Fuarı

Contemporary İstanbul Sanat Fuarı

Contemporary İstanbul Sanat Fuarı, 16-19 Ekim tarihleri arasında sanatseverlerle buluşacak. Bu yıl üçüncüsü düzenlenen fuar, İstanbul Lütfi Kırdar Ulu...
Kategori: Fuar

aç-kapa Yarışma TBD - Halıcı 15. Bilgisayarla Beste Yarışması

TBD - Halıcı 15. Bilgisayarla Beste Yarışması

TBD – Halıcı 15. Bilgisayarla Beste Yarışması TBD – Halıcı Bilgisayarla Beste Yarışması Türkiye Bilişim Derneği tarafından düzenlenen &q...
Kategori: Yarışma

aç-kapa Seminer MS Project ile Proje Yönetimi

MS Project ile Proje Yönetimi

[b]ZeruMax bilisim hizmetleri MS PROJECT İLE PROJE YÖNETİMİ Ms Project kullaniminin uygulamali ve pratik olarak anlatilacagi bu egitimi kacirmayin&#...
Kategori: Seminer

aç-kapa Yarışma Üniversiteler Arası Öğrenci Filmleri Yarışması

Üniversiteler Arası Öğrenci Filmleri Yarışması

Maltepe Üniversitesi’nin geleneksel olarak düzenlediği 6. Üniversitelerarası Öğrenci Filmleri Yarışması, kitle iletişim alanındaki yapım ve yayı...
Kategori: Yarışma

üyeler Son Kahramanlar...

stats Kimler Burada? web stats

Son 1 dakika içinde MMIstanbul' da 315 (4 kayıtlı, 311 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:

coldfusion mysql ubuntu
 
sponsor adobe istanbul