Kategoriler
Action Script 3.0 Notları

Action Script 3.0 Nesnelerle Çalışma

ActionScript, nesne odaklı programlama dili olarak bilinir. Nesne odaklı programlama, bir programlama yaklaşımı olup nesneleri kullanarak bir programda kodu organize etme yolundan fazlasını ifade etmez.

Daha önce bilgisayar programını, bilgisayarın gerçekleştirdiği bir adımlar ve talimatlar serisi olarak tanımladık. Bu durumda kavramsal olarak bilgisayarı tek bir uzun talimatlar listesi olarak düşünebiliriz. Ancak, nesne odaklı programlamada, program talimatları farklı nesneler arasında bölünür kod, işlev kümeleri olarak gruplandırılır, böylece ilgili işlev türleri veya ilgili bilgiler tek bir konteynerde bir arada gruplandırılır.

Aslında, Flash uygulamasında sembollerle çalıştıysanız, nesnelerle de çalışmaya hazırsınız demektir. Bir film klibi sembolü örneğin bir dikdörtgen çizimi tanımladığınızı ve bunun bir kopyasını Sahne Alanı’na yerleştirdiğinizi varsayın. Bu film klibi aynı zamanda (gerçekten) ActionScript’te bir nesnedir; MovieClip sınıfının bir örneğidir.

Film klibinin değiştirebileceğiniz çeşitli özellikleri vardır. Örneğin, seçili olduğunda, Özellik denetçisinde değiştirebileceğiniz değerler vardır, örn. x koordinatı, genişlik veya alfa (saydamlık) değiştirme ya da gölge filtresi ekleme gibi çeşitli renk ayarlamaları. Dikdörtgeni döndürmek için Serbest Dönüştürme aracının kullanılması gibi, diğer Flash araçları daha fazla değişiklik yapmanıza olanak sağlar. Flash geliştirme ortamında bir film klibi sembolünü değiştirmek için kullanabildiğiniz tüm bu şeyleri aynı zamanda MovieClip nesnesi adındaki tek bir kümede bir araya getirilmiş verileri değiştirerek ActionScript’te de yapabilirsiniz.

ActionScript nesne odaklı programlamada, herhangi bir sınıfın içerebileceği üç özellik türü vardır:

  • Özellikler
  • Yöntemler
  • Olaylar

Bu öğeler, program tarafından kullanılan verileri yönetmek ve hangi eylemlerin ne sırada yapılacağına karar vermek için birlikte kullanılır.

Özellikler

Özellik, bir nesnede kümelenmiş olan verilerden birini temsil eder. Bir şarkı nesnesi, artist ve title adında özelliklere sahip olabilir; MovieClip sınıfı rotation, x, width ve alpha gibi özelliklere sahiptir. Tek tek değişkenler gibi özelliklerle çalışabilirsiniz aslında özellikleri bir nesnede bulunan “alt” değişkenler olarak düşünebilirsiniz.

Aşağıda, özellik kullanan birkaç ActionScript kodu örnekleri verilmiştir. Bu kod satırı, square adındaki MovieClip öğesini 100 piksel x koordinatına taşır:

square.x = 100;

Bu kod, triangle MovieClip öğesinin dönüşüyle eşleşecek şekilde square MovieClip öğesinin dönmesini sağlamak için rotation özelliğini kullanır:

square.rotation = triangle.rotation;

Bu kod, square MovieClip öğesinin eski halinden bir buçuk kat daha geniş olmasını sağlayacak şekilde yatay ölçeğini değiştirir:

square.scaleX = 1.5;

Ortak yapıya dikkat edin: nesnenin adı sırayla nesnenin adını (square, triangle), bir nokta işaretini (.) ve özelliğin adını (x, rotation, scaleX) içerir. Nokta operatörü olarak da bilinen nokta işareti, bir nesnenin alt öğelerinden birine erişmekte olduğunu belirtmek için kullanılır. Tüm yapı olduğu gibi “değişken adı-nokta-özellik adı”, tek bir değişken gibi, bilgisayar belleğindeki tek bir değerin adı olarak kullanılır.

 Yöntemler

Yöntem, bir nesne tarafından gerçekleştirilebilen bir eylemdir. Örneğin, Flash uygulamasında, zaman çizelgesinde birçok anahtar kare ve animasyonla bir film klibi sembolü oluşturduysanız, bu film klibi oynatılabilir veya durdurulabilir ya da bu film klibine oynatma kafasını belirli bir kareye taşıması bildirilebilir.

Bu kod, shortFilm adındaki MovieClip öğesine oynatmayı başlatmasını bildirir:

shortFilm.play();

Bu satır, shortFilm adındaki MovieClip öğesinin oynatmayı durdurmasını sağlar (oynatma kafası, video duraklatılmış gibi yerinde durdurulur):

shortFilm.stop();

Bu kod, shortFilm adındaki MovieClip öğesinin oynatma kafasını Kare 1’e taşıyıp oynatmayı durdurmasını sağlar (videoyu geri sarmak gibi):

shortFilm.gotoAndStop(1);

Gördüğünüz gibi, yöntemlere de, tıpkı özellikler gibi sırayla nesnenin adı (bir değişken), nokta işareti, yöntemin adı ve parantez işaretleri yazılarak erişilebilir. Parantezler, yöntemi çağırdığınızı veya başka bir deyişle nesneye o eylemi gerçekleştirmesini bildirdiğinizi belirtmenin yoludur. Bazen eylemi gerçekleştirmek için gerekli olan ek bilgileri iletmenin bir yolu olarak, değerler (veya değişkenler) parantez içine yerleştirilir. Bu değerler, yöntem parametreleri olarak bilinir. Örneğin, gotoAndStop() yönteminin hangi kareye gideceğini bilmesi gerekir, bu nedenle parantez için tek bir parametre olması gereklidir. play() ve stop() gibi diğer yöntemler kendinden açıklayıcıdır ve bu nedenle de fazladan bilgi gerektirmez. Ancak yine de parantez içinde yazılır.

Özelliklerden (ve değişkenlerden) farklı olarak, yöntemler değer yer tutucuları olarak kullanılmaz. Ancak bazı yöntemler hesaplamalar gerçekleştirebilir ve bir değişken olarak kullanılabilecek bir sonuç döndürebilir. Örneğin, Number sınıfının toString() yöntemi, sayısal değeri metin olarak temsil edilen haline dönüştürür:

var numericData:Number = 9;
var textData:String = numericData.toString();

Örneğin, Bir Number değişkeninin değerini ekranda bir metin alanında görüntülemek isterseniz, toString() yöntemini kullanırsınız. TextField sınıfının text özelliği (ekranda görüntülenen gerçek metin içeriğini temsil eder), String olarak tanımlanır, bu nedenle yalnızca metin değerlerini içerebilir. Bu kod satırı, numericData değişkenindeki sayısal değeri metne dönüştürür ve sonra bu metnin ekranda calculatorDisplay adındaki TextField nesnesinde gösterilmesini sağlar:

calculatorDisplay.text = numericData.toString();

Olaylar

Bilgisayar programını, bilgisayarın adım adım gerçekleştirdiği bir talimatlar dizisi olarak açıklamıştık. Bazı basit bilgisayar programları, bilgisayarın gerçekleştirdiği ve programı sona erdiren birkaç adımdan fazlasını içermez. Ancak, ActionScript programları sürekli çalışacak ve kullanıcı girdisinin veya başka şeylerin oluşmasını bekleyecek şekilde tasarlanmıştır. Olaylar, bilgisayarın hangi talimatları ne zaman gerçekleştireceğini belirleyen mekanizmadır.

Temel olarak olaylar, ActionScript’in farkında olduğu ve yanıt verdiği, gerçekleşen şeylerdir. Kullanıcının bir düğmeyi tıklatması veya klavyedeki bir tuşa basması gibi birçok olay kullanıcı etkileşimiyle ilgilidir ancak başka tür olaylar da vardır. Örneğin, harici bir görüntüyü yüklemek için ActionScript’i kullanırsanız, görüntü yüklemesinin bittiğini size bildiren bir olay vardır. Temelde, bir ActionScript programı çalışırken, Adobe Flash Player ve Adobe AIR durup belirli şeylerin gerçekleşmesini bekler ve bu şeyler gerçekleştiğinde, bu olaylar için belirttiğiniz belirli bir ActionScript kodunu çalıştırır.

Temel olay işleme

Belirli bir olaya yanıt olarak gerçekleştirilmesi gereken belirli eylemleri belirtme tekniği, olay işleme olarak bilinir. Olay işleme gerçekleştirmek için ActionScript kodu yazarken tanımlamanız gereken üç önemli öğe vardır:

  • Olay kaynağı: Olayın gerçekleşeceği nesne hangisidir? Örneğin, hangi düğme tıklatılacak veya hangi Loader nesnesi görüntüyü yüklüyor? Olay kaynağı, Flash Player veya AIR tarafından olayın hedeflendiği (başka bir deyişle olayın gerçekten gerçekleştiği) nesne olduğundan, ayrıca olay hedefi olarak da bilinir.
  • Olay: Gerçekleşecek şey, yanıt vermek istediğiniz şey nedir? Birçok nesne çok sayıda olayı tetiklediğinden bunun tanımlanması önemlidir.
  • Yanıt: Olay gerçekleştiğinde hangi adımların gerçekleştirilmesini istiyorsunuz?

Olayları işlemek için her ActionScript kodu yazdığınızda, kodda bu üç öğe yer alır ve kod bu temel yapıya uyar (kalın öğeler, belirli durumunuz için dolduracağınız yer tutuculardır):

function eventResponse(eventObject:EventType):void
{
// Actions performed in response to the event go here.
}

eventSource.addEventListener(EventType.EVENT_NAME, eventResponse);

Bu kod iki şey gerçekleştirir. İlk olarak, olaya yanıt olarak gerçekleştirilmesini istediğiniz eylemleri belirtmenin bir yolu olan bir işlevi tanımlar. Daha sonra, işlevin belirtilen olaya abone olmasının sonucu olarak bu, kaynak nesnenin addEventListener() yöntemini çağırır, böylece olay gerçekleştiğinde işlevin eylemleri gerçekleştirilir. Bu parçaların her birini daha ayrıntılı şekilde ele alacağız.

İşlev, eylemleri gerçekleştirmek üzere kısayol adı gibi tek bir ad ile eylemleri bir arada gruplandırmanız için bir yol sağlar. İşlev, bir yönteme benzer, tek farkı, işlevin belirli bir sınıfla ilişkilendirilmek zorunda olmamasıdır. (Aslında yöntem, belirli bir sınıfla ilişkilendirilmiş bir işlev olarak tanımlanabilir.) Olay işleme için bir işlev oluştururken, işlevin adını seçmeniz gerekir (bu durumda eventResponse adında). Ayrıca tek bir parametre belirmeniz gerekir (bu örnekte eventObject adında). İşlev parametresinin belirtilmesi bir değişkenin belirtilmesine benzer, bu nedenle parametrenin veri türünü de belirtmeniz gerekir. (Bu örnekte, EventType parametrenin veri türüdür.)

Dinlemek istediğiniz her olay türünün kendisiyle ilişkilendirilmiş bir ActionScript sınıfı vardır. İşlev parametresi için belirttiğiniz veri türü her zaman yanıt vermek istediğiniz belirli bir olayın ilişkilendirilmiş sınıfıdır. Örneğin, click olayı (kullanıcı fareyle bir öğeyi tıklattığında tetiklenir), MouseEvent sınıfıyla ilişkilendirilir. click olayı için bir dinleyici işlevi yazmak üzere, MouseEvent veri türüne sahip bir parametreyle dinleyici işlevini tanımlarsınız. Son olarak, açma ve kapatma küme ayraçları arasına ({ … }), olay gerçekleştiğinde bilgisayarın uygulamasını istediğiniz talimatları yazarsınız.

Olay işleme işlevini yazdıktan sonra, olay kaynağı nesnesine (olayın gerçekleştiği nesne—örneğin, düğme) olay gerçekleştiğinde işlevinizin çağrılmasını istediğinizi bildirmeniz gerekir. O nesnenin addEventListener() yöntemini çağırarak bunu yaparsınız. (Olaylara sahip tüm nesneler aynı zamanda addEventListener() yöntemine de sahiptir.) addEventListener() yöntemi iki parametre alır:

  • İlk olarak, yanıt vermek istediğiniz belirli olayın adı. Yine her olay belirli bir sınıfa bağlıdır ve bu sınıfın her olay için önceden tanımlı özel bir değeri olur—bu, birinci parametre için kullanmanız gereken olayın kendi benzersiz adına benzer.
  • İkinci olarak, olay yanıtı işlevinizin adı. İşlev adının parametre olarak iletildiğinde parantez olmadan yazıldığını unutmayın.

Olay işleme işlemini inceleme

Aşağıda, bir olay dinleyicisi oluşturduğunuzda gerçekleşen işlemin adım adım bir açıklaması yer almaktadır. Bu durumda, myButton adındaki bir nesne tıklatıldığında çağrılan bir dinleyici işlevinin oluşturulması örneği yer almaktadır.

Programcı tarafından yazılan gerçek kod şu şekildedir:

function eventResponse(event:MouseEvent):void
{
// Actions performed in response to the event go here.
}

myButton.addEventListener(MouseEvent.CLICK, eventResponse);

Flash Player’da çalışırken bu kodun gerçekten çalışma şekli şöyledir. (Bu davranış Adobe AIR için de aynıdır):

  1. SWF dosyası yüklendiğinde, Flash Player, eventResponse() adında bir işlevin olduğunu not eder.
  2. Daha sonra Flash Player, kodu (daha net olmak gerekirse, işlevde olmayan kod satırlarını) çalıştırır. Bu durumda yalnızca bir kod satırı vardır: Olay kaynağı nesnesinde (myButton adında) addEventListener() yöntemini çağırma ve parametre olarak eventResponse işlevini iletme.
    1. Dahili olarak myButton öğesi, olaylarının her birini dinleyen işlevlerin bir listesini içerir, böylece addEventListener() yöntemi çağrıldığında, myButton öğesi olay dinleyicileri listesinde eventResponse() işlevini saklar.
  3. Bir noktada kullanıcı myButton nesnesini tıklatarak click olayını tetikler. (Kodda MouseEvent.CLICK olarak tanımlanmıştır.)
    Bu noktada şunlar gerçekleşir:
    1. Flash Player bir nesneyi, söz konusu olayla ilişkilendirilmiş sınıfın bir örneğini (bu örnekte MouseEvent) oluşturur. Birçok olay için bu Event sınıfının bir örneği olacaktır; fare olayları için MouseEvent örneği olurken diğer olaylar için o olayla ilişkilendirilmiş sınıfın bir örneği olur. Oluşturulan nesne olay nesnesi olarak bilinir ve gerçekleşen olayla ilgili belirli bilgiler içerir: ne tür olay olduğu, nerede gerçekleştiği ve varsa diğer olaya özgü bilgiler.
    2. Daha sonra Flash Player, myButton tarafından saklanan olay dinleyicileri listesine bakar. Birer birer bu işlevlerde dolaşarak işlevlerin her birini çağırır ve olay nesnesini parametre olarak işleve iletir. eventResponse() işlevi, myButton öğesinin dinleyicilerinden biri olduğundan, bu işlemin bir parçası olarak Flash Player uygulaması eventResponse() işlevini çağırır.
    3. eventResponse() işlevi çağrıldığında, o işlevdeki kod çalıştırılır, böylece belirttiğiniz eylemler gerçekleştirilir.

Olay işleme örnekleri

Ortak olay öğelerinden bazıları ve olay işleme kodu yazılırken kullanılabilen olası değişimler hakkında size fikir vermesi için birkaç tane daha somut olay örnekleri şunlardır:

Geçerli film klibini oynatmaya başlamak için bir düğmeyi tıklatma. Aşağıdaki örnekte, playButton düğmenin örnek adı ve this öğesi de “geçerli nesne” anlamına gelen özel bir addır:

this.stop(); function playMovie(event:MouseEvent):void { this.play(); } playButton.addEventListener(MouseEvent.CLICK, playMovie); 

Metin alanındaki yazıyı algılama. Bu örnekte, entryText bir girdi metni alanı ve outputText ise bir dinamik metin alanıdır:

function updateOutput(event:TextEvent):void { var pressedKey:String = event.text; outputText.text = "You typed: " + pressedKey; } entryText.addEventListener(TextEvent.TEXT_INPUT, updateOutput); 

URL’ye gitmek için bir düğmeyi tıklatma. Bu durumda, linkButton düğmenin örnek adıdır:

function gotoAdobeSite(event:MouseEvent):void { var adobeURL:URLRequest = new URLRequest("http://www.globya.com.tr/"); navigateToURL(adobeURL); } linkButton.addEventListener(MouseEvent.CLICK, gotoAdobeSite); 

Nesne örnekleri oluşturma

Elbette ActionScript’te bir nesneyi kullanabilmeniz için öncelikle nesnenin varolması gerekir. Nesne oluşturma işleminin bir bölümünü değişkenin bildirilmesi oluşturur; ancak bir değişken belirtildiğinde, bilgisayarın belleğinde boş bir yer oluşturulur. Değişkeni kullanmadan veya işlemeden önce, değişkene gerçek bir değer atamanı başka bir deyişle bir nesne oluşturup bu nesneyi değişkende saklamanız gerekir. Nesne oluşturma işlemi, nesneyi başlatmak başka bir deyişle, belirli bir sınıfın örneğini oluşturmak olarak bilinir.

Nesne örneği oluşturmanın basit bir yolunda ActionScript kullanılmaz. Flash’ta Sahne Alanına bir film klibi sembolü, düğme sembolü veya metin alanı yerleştirdiğinizde ve Özellik denetçisinde buna bir örnek adı atadığınızda, Flash otomatik olarak o örnek adıyla bir değişken bildirir ve bir nesne örneği oluşturup bu nesneyi değişkende saklar. Aynı şekilde Adobe Flex Builder’da, MXML uygulamasında bir bileşen oluşturup (bir MXML etiketini kodlayarak veya Tasarım modunda düzenleyiciye bileşeni yerleştirerek) bu bileşene bir kimlik atadığınızda (MXML işaretlemesinde ya da Flex Özellikleri görünümünde), bu kimlik ActionScript değişkeninin adı olur ve bileşenin bir örneği oluşturulup değişkende saklanır.

Ancak her zaman bir nesneyi görsel olarak oluşturmak istemezsiniz. Yalnızca ActionScript’i kullanarak nesne örnekleri oluşturabilmenin birçok yolu vardır. İlk olarak, birçok ActionScript veri türüyle, bir değişmez ifade (doğrudan ActionScript koduna yazılan bir değer) kullanarak bir örnek oluşturabilirsiniz. Aşağıda bazı örneklere yer verilmiştir:

  • Değişmez sayısal değer (doğrudan sayı girilir):
    var someNumber:Number = 17.239;
    var someNegativeInteger:int = -53;
    var someUint:uint = 22;
    
  • Değişmez String değeri (metin tırnak işareti içine alınır):
    var firstName:String = "George";
    var soliloquy:String = "To be or not to be, that is the question...";
    
  • Değişmez Boolean değeri (true veya false değişmez değerleri kullanılır):
    var niceWeather:Boolean = true;
    var playingOutside:Boolean = false;
    
  • Değişmez Array değeri (virgülle ayrılmış değerler listesi köşeli ayraç içine alınır):
    var seasons:Array = ["spring", "summer", "autumn", "winter"];
    
  • Değişmez XML değeri (doğrudan XML girilir):
    var employee:XML = <employee>
    <firstName>Harold</firstName>
    <lastName>Webster</lastName>
    </employee>;
    

ActionScript ayrıca Array, RegExp, Object ve Function veri türleri için değişmez ifadeleri de tanımlar. Bu sınıflarla ilgili ayrıntılar için, bkz. “Dizilerle çalışma”, “Normal ifadeler kullanma” ve “Object veri türü”.

Diğer veri türleri için, bir nesne örneği oluşturmak amacıyla şu şekilde sınıf adıyla new operatörünü kullanırsınız:

var raceCar:MovieClip = new MovieClip();
var birthday:Date = new Date(1982, 5, 9);

new operatörü kullanılarak nesne oluşturulması genellikle “sınıfın yapıcısını çağırma” olarak ifade edilir. Yapıcı, bir sınıf örneği oluşturma işleminin parçası olarak çağrılan özel bir yöntemdir. Bu şekilde bir örnek oluşturduğunuzda, sınıf adından sonra parantez koyduğunuza ve bazen parametre değerleri belirttiğinize (yöntem çağırırken de yaptığınız iki şey) dikkat edin.

Değişmez bir ifade kullanarak örnekler oluşturmanıza olanak sağlayan bu veri türleri için de bir nesne örneği oluşturmak üzere new operatörünü kullanabilirsiniz. Örneğin, bu iki kod satırı tamamen aynı şeyi yapar:

var someNumber:Number = 6.33;
var someNumber:Number = new Number(6.33);

Nesne oluşturmanın new ClassName() yolunun bilinmesi önemlidir. Görsel temsili olmayan (dolayısıyla Flash Sahne Alanı’na bir öğe yerleştirilerek veya Flex Builder’ın MXML düzenleyicisinin Tasarım moduyla oluşturulamayan) herhangi bir ActionScript veri türünde örnek oluşturmanız gerekirse, new operatörünü kullanarak doğrudan ActionScript’te nesneyi oluşturup bunu yapabilirsiniz.

Özellikle de Flash’ta new operatörü ayrıca Kütüphane’de tanımlanmış ancak Sahne Alanı’na yerleştirilmeyen bir film klibi sembolü örneği oluşturmak için de kullanılabilir. Bununla ilgili daha fazla bilgi için, bkz. “ActionScript ile MovieClip nesneleri oluşturma”.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.