Merhaba arkadaşlar bu yazımda sizlere basit bir örnek üzerinden Actionscript ve Actionscript'te nesne yönelimli programlamayla ilgili olabildiğince çok şey aktarmaya çalışacağım.
İlk olarak bir Flash dosyası oluşturalım. Actionscript'i dosya sınıfı oluşturarak veya doğrudan dosya üzerine yazabiliriz. Öğrenmiş olmak için bir dosya sınıfı oluşturalım.
Dosyamızın Özellikler(Properties) panosunda “class” yerine bir dosya adı yazıp kalem simgesine basarsak bize bir sınıf dosyası oluşturacaktır. Burada yapacak bir işimiz kalmadı; “sample.as” dosyasından devam edelim.
1\. package {
Yeni bir sınıf dosyasına bu şekilde başlıyoruz. "package” etiketinden sonra getireceğimiz kelime ya da arasında noktalar bulunan kelime grubu hiyerarşik olarak bu sınıf dosyasının ait olduğu paketi belirtir. Örneğin “package slideshow.controls”, sınıf dosyasının “slideshow” paketinin içindeki “controls” paketine ait olduğunu belirtir.
Slideshow klasörüyle aynı dizinden bu sınıfı import etmek için de “import slideshow.controls.sample” satırını kullanmalıyız.
2\. import flash.display.MovieClip;
3\. import weirdButton;
4\. import flash.events.MouseEvent;
Actionscript'in en üst seviyedeki (top level) kısımları hariç fonksiyonlarını, olaylarını(events) ya da kendi yazdığımız diğer sınıf dosyalarını kullanabilmemiz için içeri aktarmanız (import) gerekiyor.
6\. public class sample extends MovieClip {
Yeni bir sınıf tanımladık. "extends MovieClip", bu sınıf dosyasının MovieClip sınıfının alt sınıfı olduğunu belirtmektir. MovieClip'ten eksiği olmayan; ama buraya yazacağımız yeni özelliklere de sahip bir sınıfımız olacağını tanımlıyoruz. Burada nesne yönelimli programlama yaklaşımının en gözde olanaklarından biri olan kalıtım özelliğini kullanmış oluyoruz. Bu bir belge sınıfı (document class) olduğu için “extends MovieClip” eklememiz gerekiyor.
7\. public var button:weirdButton;
Yeni bir değişken tanımlıyoruz ve bu değişken yine bizim oluşturduğumuz sınıfın bir nesnesi.
8\. public var activeButton:weirdButton;
Bu değişken bizim seçili düğmemizi tutacak ki kullanıcı neyin seçili olduğunu görebilsin.
9\. public var colors:Array = [0x0000ff, 0x000000, 0xff00000, 0x00ccff, 0x00ff00]
Tanımladığımız bu dizi, bizim butonlarımızın renkleri olacak bir grup rengi tutuyor .
10\. public function sample() {
Bu fonksiyon constructor fonksiyonudur. Bir sınıfın yei bir nesnesi oluşturulurken çalışan fonksiyondur.
11\. for(var i:uint = 0; i < colors.length; i++) {
12\. button = new weirdButton(colors[i]);
Yukarıda kurduğumuz döngüyle “colors” dizisinin her bir elemanı için yeni bir buton oluşturuyoruz ve bir parametre veriyoruz. Bu parametre constructor fonksiyona verilmiş oluyor.
13\. button.addEventListener(MouseEvent.CLICK, clickHandler);
Olası ıklamaların düğmemiz tarafından dinlenmesini sağlıyoruz.
14\. button.x = 10 + i * (button.width + 10);
15\. button.y = 10;
Yukarıdaki iki satırda düğmemizin ekrandaki yerini belirliyoruz.
16\. button.buttonMode = true;
Fare imleciyle üzerine gelindiğinde düğme olduğunun anlaşılmasını sağlıyoruz(imleç el simgesine dönüşüyor).
17\. addChild(button); }}
Yukarıdaki fonksiyon yardımıyla düğmemizi sahneye ekliyoruz.
20\. public function clickHandler(event:MouseEvent):void
Constructor fonksiyonda döngüyle her bir düğmeye tıklandığında çalışmasını söylediğimiz clickHandler fonksiyonu oluyor.
22\. if(activeButton) {
23\. activeButton.active = false;
Eğer önceden herhangi bir düğmeye tıklamışsak; yani bir düğmeye tıklandığında daha önceden activeButton atanmışsa onu normal haline döndürüyoruz.
26\. activeButton = weirdButton(event.currentTarget);
O anda tıklanmış olan düğmeyi daha sonra başka bir düğmeye tıklandığında eski haline döndürebilmek için bi değişkene atıyoruz.
27\. activeButton.active = true;
Tıklanmış olan düğmeyi de etkin hale getiriyoruz.
Son hali:
1\. package {
2\. import flash.display.MovieClip;
3\. import weirdButton;
4\. import flash.events.MouseEvent;
5.
6\. public class sample extends MovieClip {
7\. public var button:weirdButton;
8\. public var activeButton:weirdButton;
9\. public var colors:Array = [0x0000ff, 0x000000, 0xff00000, 0x00ccff, 0x00ff00]
10\. public function sample() {
11\. for(var i:uint = 0; i < colors.length; i++) {
12\. button = new weirdButton(colors[i]);
13\. button.addEventListener(MouseEvent.CLICK, clickHandler);
14\. button.x = 10 + i * (button.width + 10);
15\. button.y = 10;
16\. button.buttonMode = true;
17\. addChild(button);
18\. }
19\. }
20\. public function clickHandler(event:MouseEvent):void
21\. {
22\. if(activeButton) {
23\. activeButton.active = false;
24\. }
25\.
26\. activeButton = weirdButton(event.currentTarget);
27\. activeButton.active = true;
28\. }
29\. }
30\. }
Şimdi de weirdButton sınıfımıza bakalım.
1\. package {
2\. import flash.display.*;
Her sınıfta olduğu gibi “package” ile başlıyoruz ve içeri aktarmanız gerekenleri ekliyoruz.
3\. public class weirdButton extends MovieClip
Tekerleği yeniden icat etmeye kalkışmayıp MovieClip'in özelliklerinin üzerine bir şeyler eklemek için yine burada da “extends MovieClip” kullanıyoruz (önceden belge sınıfı olduğu için eklemiştik).
5\. private var _active:Boolean = false;
Bu değişkenle etkin hale geçerken yapılan değişikliklerin gerçekleştirilmesini kolaylaştıracağız.
6\. private var rect:Sprite = new Sprite();
Bir sprite nesnesi oluşturuyoruz. Aşağıda bunun üzerine bir dikdörtgen çizeceğiz. Sprite'a movieclip'in zaman çizelgesi olmayan hali diyebiliriz.
8\. public function weirdButton(color:uint = 0x000000)
10\. rect.graphics.beginFill(color,1);
Sahneye bir grafik çizerken bu fonksiyonla başlıyoruz. Fonksiyona birinci parametre ile grafiğin rengini, ikincisi ile opaklığını veriyoruz. İkinci parametrede “1” değeri tam opaklık belirtiyor.
11\. rect.graphics.drawRect(0,0,80,50);
Dikdörtgen çizmek için bu fonksiyonu kullanıyoruz. Parametreler sırasıyla dikdörtgenin sol üst köşesinin x koordinatını, y koordinatını, dikdörtgenin enini ve boyunu belirtiyor.
12\. rect.graphics.endFill();
13\. addChild(rect);
Yukarıda da çizimin bittiğini belirtip sahneye ekliyoruz.
15\. public function set active(value:Boolean):void
Bu fonksiyonu tanımladıktan sonra "active = false" demek "set active(false)" anlamına geliyor ve sadece bir değişkenin değerini değiştirerek satırlarca kod çalıştırabiliyoruz.
17\. _active = value;
18\. if(_active) {
19\. this.alpha = 0.5;
20\. } else {
21\. this.alpha = 1;
Burası da gayet net, buton etkin ise alpha değerini 0.5 değilse 1 yapıyoruz.
Son hali:
1\. package {
2\. import flash.display.*;
3\. public class weirdButton extends MovieClip
4\. {
5\. private var _active:Boolean = false;
6\. private var rect:Sprite = new Sprite();
7.
8\. public function weirdButton(color:uint = 0x000000)
9\. {
10\. rect.graphics.beginFill(color,1);
11\. rect.graphics.drawRect(0,0,80,50);
12\. rect.graphics.endFill();
13\. addChild(rect);
14\. }
15\. public function set active(value:Boolean):void
16\. {
17\. _active = value;
18\. if(_active) {
19\. this.alpha = 0.5;
20\. } else {
21\. this.alpha = 1;
22\. }
23\. }
24\. }
25\. }