sponsor adobe istanbul
Hatırlatma: MMIstanbul, hem tasarımcılar hem de programcılar içindir. MMIstanbul'u arkadaşlarınıza tavsiye edebilirsiniz.
Profili Göster

ActionScriptle Sayfa Çözünürlügüne Göre Obje Konumlandırma

Yağız Gürgül Tarih: 17/06/2007 Yorum: 0 adet

Okunma : 415 Tutanlar: Bu yazıyı 0 kişi tuttu.

Bu makalemde Flash içindeki bir movieclip’i sayfanın çözünürlügüne göre ayarlayabilecegiz. Bunun nasıl olacağını merak ediyorsanız, işte size çalışan canlı bir örnek:

http://www.mmistanbul.com/makaleler/images/flashcenter/sayfaoran.swf

Çıkan pencerede 5 tane kare sayfanın büyüklügüne göre yer değiştiriyor. İsterseniz pencereyi ufaltın büyütün…

Bunu yapabilmek için önce mantığı kavramak lazım.Yeni bir flash dosyası açın.Bu çalışmanın boyutları 800×600 olsun.Bu boyutta bir kare çizin; yani ekranı kaplasın.Ardından bu karenin x=0 y=0 olsun.Yani bir anlamda arka plan olsun.

ilk frame kodumuz:

Stage.scaleMode = "noscale";

ctrl+enter dedikten sonra pencereyi büyütün küçültün.Gördügünüz gibi bu kod karenin pencerenin boyutu değişsede, kendisinin boyutlarının değişmemesini sağladı.

Yanlız gördügünüz gibi Çalışmanın 0,0 noktası aynı yerde kaldı.Yani herşey yerli yerinde ama Stage.width yani sahne genişliği değişti.

Şimdi ortama bir kare daha çizin.

Bunu seçin>sağtuş>convert to symbol>movieclip>registration point: sağ üst köşe>ok

Bu işlemlerden sorna bu movieclip instance name = kutu olsun.

Frame kodumuz:

Stage.scaleMode = "noscale";
kutu.onEnterFrame = function() {
this._x=0-(Stage.width-800)/2
}

Çalışmanızı test edin(ctrl+enter).Çalışma penceresini büyütün küçültün. Kutu hep sağa dayanacaktır.Peki bu nasıl oldu?

İlk çalışmamızda:

mmistanbul.com

0,0 nokta kırmızı yuvarlaktı.Şimdi bir bakalım. Bizim mavi karenin boyutunu biliyoruz 800.Ama yanlardaki iki boşlugu bilmiyoruz; ama iki beyaz alananında eşit büyüklekte oldugunu biliyoruz çünkü bu sabittir.

Matematiksel olarak: x | 800 | x

Eger bu işlemde toplamı bulabilirsek x’lerin uzunluklarını bulabiliriz.Toplam da Stage.width’e eşittir.Yani tüm pencerenin genişliği.Ozaman yeni denklemimiz:

x+800+x=Stage.width; 2x=Stage.width-800 x=(Stage.width-800)/2 [/code]

Buraya kadar tamam.O sağlardaki beyaz alanları bulduk.Şimdi şöyle bir mantık kuralım.Eger kırmızı dairenin yani mavini en uç sağ bölümünün x degeri 0 ise beyaz kısımdaki herhangi bir nokta – degerdedir.Ozaman diyoruzki kırmızı noktadan beyaz alanın genişligini çıkarırsak en sağ kordinatı bulabiliriz.

yani: kordinat=0-(Stage.width-800)/2

Tıpkı koddaki gibi… Diger köşelere yerleşimler aynı mantıkta.Peki her seferinde böyle kod yazmak zorunda mıyız diye sorarsanız.Hayır değilsiniz.

Yeni bir Action Script dosyası açın ve şunları yazın:

Stage.scaleMode = "noScale";
_global.oW = Stage.width;
_global.oH = Stage.height;
MovieClip.prototype.daya = function(yer:String, ivme:Number, bW:Boolean, bH:Boolean) {
if (yer == "sag_alt") {
this.onEnterFrame = function() {
//trace(Stage.width);
this._x += (((oW+(Stage.width-oW)/2)-this._width)-this._x)*ivme;
this._y += (((oH+(Stage.height-oH)/2)-this._height)-this._y)*ivme;
if (bW == false) {
this._xscale += ((Stage.width/oW*100)-this._xscale)*ivme;
}
if (bH == false) {
this._yscale += ((Stage.height/oH*100)-this._yscale)*ivme;
}
};
}
if (yer == "sol_alt") {
this.onEnterFrame = function() {
//trace(Stage.width);
this._x += (((oW-Stage.width)/2)-this._x)*ivme;
this._y += (((oH+(Stage.height-oH)/2)-this._height)-this._y)*ivme;
if (bW == false) {
this._xscale += ((Stage.width/oW*100)-this._xscale)*ivme;
}
if (bH == false) {
this._yscale += ((Stage.height/oH*100)-this._yscale)*ivme;
}
};
}
if (yer == "sag_ust") {
this.onEnterFrame = function() {
//trace(Stage.width);
this._x += (((oW+(Stage.width-oW)/2)-this._width)-this._x)*ivme;
this._y += (((oH-Stage.height)/2)-this._y)*ivme;
if (bW == false) {
this._xscale += ((Stage.width/oW*100)-this._xscale)*ivme;
}
if (bH == false) {
this._yscale += ((Stage.height/oH*100)-this._yscale)*ivme;
}
};
}
if (yer == "sol_ust") {
this.onEnterFrame = function() {
//trace(Stage.width);
this._x += (((oW-Stage.width)/2)-this._x)*ivme;
this._y += (((oH-Stage.height)/2)-this._y)*ivme;
if (bW == false) {
this._xscale += ((Stage.width/oW*100)-this._xscale)*ivme;
}
if (bH == false) {
this._yscale += ((Stage.height/oH*100)-this._yscale)*ivme;
}
};
}
if (yer == "orta") {
this.onEnterFrame = function() {
//trace(Stage.width);
this._x += (((oW/2)-this._width/2)-this._x)*ivme;
this._y += (((oH/2)-this._height/2)-this._y)*ivme;
if (bW == false) {
this._xscale += ((Stage.width/oW*100)-this._xscale)*ivme;
}
if (bH == false) {
this._yscale += ((Stage.height/oH*100)-this._yscale)*ivme;
}
};
}
if (yer == "kapla") {
this.onEnterFrame = function() {
//trace(Stage.width);
this._x += (((oW-Stage.width)/2)-this._x)*ivme;
this._y += (((oH-Stage.height)/2)-this._y)*ivme;
//
this._width += (((oW+(Stage.width-oW)/2)-this._width)-this._x)*ivme;
this._height += (((oH+(Stage.height-oH)/2)-this._height)-this._y)*ivme;
};
}
};
///////////////////////////////////////
/*Acıklama----------------------------
movieclip.daya("sag_ust", iv, bW, bH);

Kodda ilk başta movieclip’in instance name’i yazılır. Bu movieclip’in registration noktası 0,0 olmalıdır.

bW=Movieclipin genişligini koruması
bH=Movieclipin yüksekligini koruması

iv=ivme degeri. 0<=1 olmalıdır.Eger 1 olursa animasyon iptal edilir direk dayanır

Movieclip içinde onEnterFrame olmamalıdır.Yoksa boyutlandırma çalışmaz… */

Evet bu kadar Smile bu dosyayı çalışmanızla aynı klasör içine koyun ve çalışmanızda şu kodları kullanmanız yeterli:

movieclip.daya("sag_ust",0.1, false, false);

Bu kadar Umarım anlatabilmişimdir… Kolay gelsin…

Kaynak dosyalar:

http://www.mmistanbul.com/makaleler/images/flashcenter/oranornek.zip

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

İçeriğe kayıtlı yorum bulunmuyor. İlk yorumu siz buradan ekleyebilirsiniz.


yeni üyelik | şifremi unuttum

aç-kapa Konferans 2. Ulusal Yazılım Mimarisi Konferansı - UYMK'08

2. Ulusal Yazılım Mimarisi Konferansı - UYMK'08

2.Ulusal Yazılım Mimarisi Konferansı (UYMK’08), 11 – 12 Eylül 2008 tarihlerinde Ege Üniversitesi Bilgisayar Mühendisliği Bölümü ev sah...
Kategori: Konferans

aç-kapa Sergi İstanbul'da Bir Sürrealist: Salvador Dali

İstanbul'da Bir Sürrealist: Salvador Dali

Picasso ve Rodin’den sonra kimi görmek istersiniz deseler; Salvador Dali listenin ilk başlarında yer almaz mı? Ressam, yazar, bilim adamı, tasar...
Kategori: Sergi

aç-kapa Yarışma İnteraktif Pazarlama Zirvesi ve Grand Interactive Awards

İnteraktif Pazarlama Zirvesi ve Grand Interactive Awards

Türkiye’nin interaktif pazarlama projelerini değerlendiren ilk ve tek yarışması Grand Interactive Awards (GIA) için başvurular 15 Ağustos tarihi...
Kategori: Yarışma

aç-kapa Fuar CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de

CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de

CeBIT Bilişim Eurasia bu yıl 7 – 12 Ekim tarihlerinde düzenleniyor Adını dünyanın en büyük on fuarı arasına yazdırarak, İstanbul’u Avrasy...
Kategori: Fuar

aç-kapa Sempozyum Yazılım Kalitesi ve Yazılım Geliştirme Araçları Sempozyumu 2008 (YKGS 2008)

Yazılım Kalitesi ve Yazılım Geliştirme Araçları Sempozyumu 2008 (YKGS 2008)

Yazılım Kalitesi ve Yazılım Geliştirme Araçları Sempozyumu 2008 (YKGS 2008), yazılım mühendisliği alanında; kalite deneyimlerini, çözümlerini, yazılım...
Kategori: Sempozyum

üyeler Üyelerimizden...

MMIstanbul Adobe UG MMIstanbul Adobe UG

adobe user group

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

stats Kimler Burada? web stats

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

coldfusion mysql ubuntu
 
sponsor adobe istanbul