Merhaba arkadaşlar ;

Actionscript 2.0 ve 3.0 programlama üzerine çalışmalarınızda kolaylık sağlayacağını ümit ettiğim bir bilgiyi bugün paylaşmak istedim. Verdiğim son eğitimlerde Actionscript 2.0 programlama içerisinde class yapılarına gerek kalmadan bazı basit object orient uygulamalar yapıldığını aslında bunun en geliştirilebilir şekilde 2.0 ile class yapısıyla yapılabileceğini göstereceğim.

Actionscript 2.0 sanılanın aksine Object Orient bir dildir.Class yapısı da mevcuttur.Aslında 3.0 ile gelen tanımlamalar ve kısıtlamalar Actionscript dilinin OOP (Object Orient Programming) kısmını programcılar için daha anlaşılır ve yönetilir yapmıştır.Mesela kafanıza göre skor = 5 gibi bir değişken 2.0da class olarak as dosyası içinde değişken olarak tanımlanabilirken 3.0 bu değişkenin mutlaka tipini isteyecektir var skor:unit = 5 gibi. Bu sayede performans arttırımı da sağlanmıştır.

Peki mesela devamlı kullanmak isteidğiniz bir fonksiyon var ve bunu bir class ile ilişiklendirmek istiyorsunuz,3.0'da yeni bir class oluşturup özelliklerini kullanacağımız classa extends diyerek yaptığımız iş ne yazıkki 2.0 da yok.Ama tam da 20 mantığına uygun prototype adlı özellik var. Mesela ctionscript 2.0 içerisinde varolan (bult-in) gelen bazı classları (Math,Date,Movie Clip....) gibi bu classların varolan özelliklerine kendiniz devamlı kullandığınız bir işlemi eklemek istiyorsunuz mesela math sınıfında uzaklık hesaplama yok , veya tarihte de geri sayım yok,movie klipte de çevirme işlemleri yok.Bunları kod ile yapabiliriz ama herseferinde yapmak yerine mesela MovieClip classına flipX yani x koordinatında çevir fonksiyonunu prototype ile ekleyebilir ve kullanabiliriz. Örnek daha açıklayıcı olacaktır.

________________________________________________________

MovieClip.prototype.flipX = function () {
this._xscale = -this._xscale;
};
_________________________________________________________

// Böylelikle MovieCliplerde artık flipX işlemini direk kullanabiliriz.

resim_mc.flipX();

________________________________________________________

MovieClip.prototype.flipY = function () {
this._yscale = -this._yscale;
};
________________________________________________________



Ayrıca daha önceden o classta tanımlı fonksiyonları da değiştirmek isteyebilirsiniz. Mesela Array dizi classına dizinin uzunluğunu veren data fonksiyonunu da aşağıdaki gibi ekleyebiliriz.


Array.prototype.push = function (data) {
this[this.length] = data;
};

Ancak bazı statik yani class yapısında class adı önünde dynamic yazmayan default statik olarak dinamik eklentilere kapalı olan classlarda mevcuttur mesela Math Classı. Math classına da mesela ortamala al veya uzaklıkhesapla(x,y) gibi eklentiler yapabilmek mümkün sadece prototype yazmanıza gerek kalmıyor :


Math.uzaklikHesapla = function (x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
return Math.sqrt (dx*dx + dy*dy);
};

Burada x1 ve y1 koordinatlı bir noktayla x2 y2 koordinatlı başka bir noktanın uzaklıklarını hesaplayan matematiksel olarakta hipotenüs formulunden faydalanarak farklarının karelerinin kökünü alıyoruz.



Actionscript 3.0 da ise class yapısında mesela flipX() örneğini verecek olursak yeni bir class oluşturup MovieClip classına extend edip eklemek istediklerimizi ekleyebiliyoruz.

______________________________________________________________

package
{
import flash.display.MovieClip;

public class Flip extends MovieClip
{
public function FlipX(x1)
{
x = x1;
this.scaleX = -(this.scaleX)
}
public function FlipY(y1)
{
x = y1;
this.scaleY = -(this.scaleY)
}

}
}
______________________________________________________________


bu şekilde 1 kerelik tanımlamayla çoklu dosyalardan bu as dosyasındaki class ile erişebilir ve yönetilebilinir bir yapı zaten bu da Object Orient oluyor sağlanıyor.2.0 da prototype ise sadece tanımlı olan frame'de kullanılabiliniyor ve her defasında çağrılması gerekiyordu.


Faydalı olması dileğiyle....