Flash, animasyonu veya bir durum değişikliğini yürütmek için zaman çizelgesi benzetimini kullanır. Zaman çizelgesi kullanan herhangi bir görsel öğenin MovieClip nesnesi olması veya MovieClip sınıfından genişletilmesi gerekir. ActionScript herhangi bir film klibine durmasını, oynatmasını veya zaman çizelgesinde başka bir noktaya gitmesini bildirse de, dinamik olarak bir zaman çizelgesi oluşturmak ya da belirli karelere içerik eklemek için ActionScript kullanılamaz; bu yalnızca Flash geliştirme aracı kullanılarak mümkün olur.
Bir MovieClip oynatılırken, SWF dosyasının kare hızı tarafından dikte edilen bir hızda zaman çizelgesinde ilerler. Alternatif olarak, ActionScript'te
Stage.frameRate
özelliğini ayarlayarak bu ayarı geçersiz kılabilirsiniz.
Film kliplerini oynatma ve oynatmayı durdurma
play()
ve
stop()
yöntemleri, zaman çizelgesi boyunca bir film klibinin temel denetimine olanak sağlar. Örneğin, Sahne Alanı'nda, örnek adı
bicycle
olarak ayarlanmış ve ekranda hareket eden bir bisiklet animasyonunu içeren bir film klibi sembolü olduğunu varsayın. Aşağıdaki kod, ana zaman çizelgesinde bir anahtar kareye eklenir,
bicycle.stop();
bisiklet hareket etmez. (Animasyonu oynatılmaz.) Bisikletin hareketi, bir kullanıcı etkileşimi yoluyla başlatılabilir. Örneğin,
startButton
adında bir düğmeniz varsa, ana zaman çizelgesi üzerinde anahtar karedeki şu kod, düğmenin tıklatılmasıyla animasyonun oynatılmasını sağlar:
// This function will be called when the button is clicked. It causes the
// bicycle animation to play.
function playAnimation(event:MouseEvent):void
{
bicycle.play();
}
// Register the function as a listener with the button.
startButton.addEventListener(MouseEvent.CLICK, playAnimation);
Hızlı ileri ve geri sarma
play()
ve
stop()
yöntemleri, film klibinde oynatımı denetlemenin tek yolu değildir.
nextFrame()
ve
prevFrame()
yöntemlerini kullanarak da zaman çizelgesi boyunca oynatma kafasını elle ileri veya geri hareket ettirebilirsiniz. Bu yöntemlerden herhangi biri çağrıldığında oynatma durdurulur ve oynatma kafası sırayla bir kare ileri veya geri hareket ettirilir.
play()
yönteminin kullanılması, film klibi nesnesinin
enterFrame
olayı her tetiklendiğinde
nextFrame()
öğesinin çağrılmasıyla aynıdır. Bu satırlar boyunca, aşağıdaki gibi,
enterFrame
olayı için bir olay dinleyicisi oluşturup
bicycle
öğesine dinleyici işlevinde bir önceki karesine gitmesini bildirerek
bicycle
film klibinin geriye doğru hareket etmesini sağlayabilirsiniz:
// This function is called when the enterFrame event is triggered, meaning
// it's called once per frame.
function everyFrame(event:Event):void
{
if (bicycle.currentFrame == 1)
{
bicycle.gotoAndStop(bicycle.totalFrames);
}
else
{
bicycle.prevFrame();
}
}
bicycle.addEventListener(Event.ENTER_FRAME, everyFrame);
Normal oynatımda, bir film klibi birden çok kare içeriyorsa, oynatma sırasında bu süresiz olarak döngü oluşturur; başka bir deyişle, son karesini geçerse Kare 1'e geri döner.
prevFrame()
veya
nextFrame()
öğesini kullandığınızda, bu davranış otomatik olarak oluşmaz. (Oynatma kafası Kare 1'deyken
prevFrame()
çağrılırsa, oynatma kafası son kareye taşınmaz.) Yukarıdaki örnekte
if
koşulu, oynatma kafasının birinci kareye doğru geri yönde ilerleyip ilerlemediğini kontrol eder ve oynatma kafasını son karesine ayarlayarak geriye doğru oynatılan film klibinin etkili şekilde sürekli bir döngüsünü oluşturur.
Farklı bir kareye atlama ve kare etiketleri kullanma
Yeni bir kareye film klibi gönderilmesi basit bir işlemdir.
gotoAndPlay()
veya
gotoAndStop()
öğesinin çağrılmasıyla, film klibi bir parametre tarafından belirtilen kare sayısına atlar. Alternatif olarak, bir kare etiketinin adıyla eşleşen bir dizeyi iletebilirsiniz. Zaman çizelgesindeki herhangi bir kare bir etikete atanabilir. Bunu yapmak için, zaman çizelgesinde bir kare seçin ve sonra Özellik denetçisinde Kare Etiketi alanına bir ad girin.
Sayı yerine kare etiketlerinin kullanılmasının avantajı, özellikle karmaşık bir olay klibi oluşturulurken daha belirgin olur. Animasyondaki karelerin, katmanların ve araların sayısı arttıkça, önemli kareleri, film klibinin davranışındaki kaydırmaları temsil eden bilgilendirici açıklamalarla (örneğin, "kapalı", "yürüyor", "çalışıyor") etiketleyin. Etiketlenmiş bir kareye giden ActionScript çağrıları, belirli bir kare sayısının değil, tek bir başvurunun (etiket) işaretçisi olduğundan bu, kodun okunabilirliğini artırır ve esneklik sağlar. Daha sonra animasyonun belirli bir parçasını farklı bir kareye taşımaya karar verirseniz, yeni konumda karelerin etiketlerini aynı tuttuğunuz sürece ActionScript kodunuzu değiştirmeniz gerekmez.
ActionScript 3.0, koddaki kare etiketlerini temsil etmek için FrameLabel sınıfını içerir. Bu sınıfın her örneği tek bir kare etiketini temsil eder ve Özellik denetçisinde belirtildiği gibi kare etiketinin adını temsil eden bir
name
özelliğine ve etiketin zaman çizelgesinde yerleştirildiği karenin kare sayısını temsil eden bir
frame
özelliğine sahiptir.
Bir film klibi örneğiyle ilişkilendirilmiş FrameLabel örneklerine erişmek için, MovieClip sınıfı doğrudan FrameLabel nesnelerini döndüren iki özellik içerir.
currentLabels
özelliği, bir film klibinin tüm zaman çizelgesi boyunca yer alan tüm FrameLabel nesnelerini içeren bir dizi döndürür.
currentLabel
özelliği, zaman çizelgesi boyunca en son karşılaşılan kare etiketinin adını içeren bir dize döndürür.
robot
adında bir film klibi oluşturduğunuzu ve bunun animasyonunun çeşitli durumlarını etiketlediğinizi varsayın. Aşağıdaki kodda olduğu gibi,
robot
öğesinin geçerli durumuna erişmek için
currentLabel
özelliğini denetleyen bir koşul oluşturabilirsiniz:
if (robot.currentLabel == "walking")
{
// do something
}
Flash Player 11.3 ve AIR 3.3,
frameLabel
olayını FrameLabel sınıfına ekledi. Bir kare etiketini temsil eden FrameLabel örneğine bir olay işleyicisi atayabilirsiniz. Oynatma kafası kareye girdiğinde olay gönderilir.
Aşağıdaki örnek, MovieClip'e yönelik kare etiketi dizisindeki ikinci kare etiketi için bir FrameLabel örneği oluşturur. Ardından
frameLabel
olayı için bir olay işleyicisi kaydeder:
var myFrameLabel:FrameLabel = robot.currentLabels[1];
myFrameLabel.addEventListener(Event.FRAME_LABEL, onFrameLabel);
function onFrameLabel(e:Event):void {
//do something
}
Sahnelerle çalışma
Flash geliştirme ortamında, SWF dosyasının ilerleyeceği zaman çizelgeleri dizisini ayırmak için sahneleri kullanabilirsiniz.
gotoAndPlay()
veya
gotoAndStop()
yöntemlerinin ikinci parametresini kullanarak, oynatma kafasının gönderileceği bir sahneyi belirtebilirsiniz. Tüm FLA dosyaları yalnızca başlangıç sahnesinde başlar ancak siz yeni sahneler oluşturabilirsiniz.
Sahnelerin birçok dezavantajı olduğundan, sahnelerin kullanılması her zaman en iyi yaklaşım olmayabilir. Birden çok sahne içeren bir Flash belgesinin korunması, özellikle de birden çok yazarın bulunduğu ortamlarda zor olabilir. Yayınlama işlemi tüm sahneleri tek bir zaman çizelgesinde birleştirdiğinden, birden çok sahne, bant genişliğinde de verimsiz olabilir. Bu da asla oynatılmasa da, tüm sahnelerin aşamalı indirilmesine neden olur. Bu nedenlerden dolayı, birden çok uzun zaman çizelgeli animasyonların organize edilmesi dışında, birden çok sahne kullanılması genellikle önerilmez.
MovieClip sınıfının
scenes
özelliği, SWF dosyasındaki tüm sahneleri temsil eden bir Scene nesneleri dizisini döndürür.
currentScene
özelliği, geçerli olarak oynatılan sahne alanını temsil eden bir Scene nesnesini döndürür.
Scene sınıfı, bir sahneyle ilgili bilgi veren birçok özelliğe sahiptir.
labels
özelliği, o sahnedeki kare etiketlerini temsil eden bir FrameLabel nesneleri dizisini döndürür.
name
özelliği, dize olarak sahnenin adını döndürür.
numFrames
özelliği, sahnedeki toplam kare sayısını temsil eden bir int öğesini döndürür.
|
|
|