Mobil aygıtlar için Animate içeriği oluşturmak üzere bazı temel ilkeleri izleyin. Örneğin, Animate geliştiricileri çoğu zaman aşırı karmaşık resimlerden ve fazla boşluklardan ya da saydamlıklardan kaçınırlar.
Mobil aygıtların performansları çok farklı olduğundan Flash Lite geliştiricileri başka zorluklarla da karşı karşıya kalırlar. İçerik birçok farklı aygıta yayınlanacaksa geliştiriciler bazen en küçük ortak paydaya göre yazmak zorunda kalır.
Mobil içeriği en iyi duruma getirmek bazı dengeleri kurmayı gerektirir. Örneğin bir teknik içeriğin daha iyi görünmesini sağlarken bir diğeri daha iyi performans sağlayabilir. Bu dengeleri değerlendirirken benzeştiricide ve hedef aygıtta birbirini izleyen birçok test yapmanız gerekecektir. Renklerin gerçekliğini, metnin okunabilirliğini, fiziksel etkileşimleri, arabirimin yanıt verme yeteneğini ve gerçek mobil deneyimin diğer yönlerini değerlendirmek için içeriğinizi aygıtın kendisinde görmeniz gerekir.
Not:
Flash Lite hakkındaki içerik, Flash CC ve üst sürümler için geçerli değildir.
Mobil aygıtlar için içerik oluştururken aygıtın CPU sınırlamalarını göz önünde bulundurun. Bu ilkeleri izlemek Flash Lite içeriğinin yavaş çalışmasını önlemeye yardımcı olabilir:
Yeni bir Flash Lite dosyası oluştururken belgenin doğru ayarlanıp ayarlanmadığını kontrol edin. Animate dosyaları sorunsuz şekilde ölçeklense de, dosya yerel Sahne Alanı boyutunda çalışmıyorsa ve oynatıcıda ölçeklenmek zorundaysa performans düşebilir. Belgenin Sahne Alanı boyutunu hedef aygıtın çözünürlüğüyle eşleşecek şekilde ayarlamaya çalışın. Ayrıca Flash Player'ı Flash Lite'ın doğru sürümüne ayarlayın.
Flash Lite, vektör grafiklerini düşük, orta ve yüksek kalitede oluşturabilir. Oluşturma kalitesi arttıkça Flash Lite, vektör grafiklerini daha sorunsuz ve daha doğru şekilde oluşturur ve aygıtın işlemcisine daha fazla iş yükü biner. Karmaşık animasyonlar sağlamak için, oynatıcının kalite ayarını değiştirmeyi deneyin ve sonra SWF dosyasını kapsamlı şekilde test edin. SWF dosyasının işlenme kalitesini kontrol etmek için _quality özelliğini ya da SetQuality komutunu kullanın. Bu _quality özelliği için geçerli değerler LOW (Düşük), MEDIUM (Orta) ve HIGH (Yüksek)'tir.
Eşzamanlı ara doldurmaların sayısını sınırlayın. Ara doldurmaların sayısını azaltın ya da animasyon sırasını biri bittiğinde diğeri başlayacak şekilde oluşturun.
CPU'nun iş yükünü artıracağı için sembollerde saydamlığı (alfa) gereğinden fazla kullanmayın. Özellikle alfa düzeyleri tümüyle opak olmayan (%100'den düşük olan) ara doldurma sembollerini kullanmaktan kaçının.
Büyük maskeler, aşırı hareket, alfa karıştırma, aşırı degradeler ve karmaşık vektörler gibi CPU'ya yüklenen görsel efektlerden kaçının.
En verimli sonuçları elde etmek için ara doldurmaların, anahtar kare animasyonlarının ve ActionScript tarafından üretilen hareketlerin bileşimleriyle denemeler yapın.
Vektörel ovalleri ve daireleri işlemek, dörtgenleri işlemeye göre çok daha fazla bellek gerektirir. Kavisli ve oval konturlar kullanmak da CPU kullanımını büyük oranda artırır.
Animasyonları gerçek hedef aygıtlarda sık sık test edin.
Animate animasyonlu bir bölgeyi çizdiğinde bu alanın etrafında dikdörtgen bir sınırlama kutusu tanımlar. Bu dikdörtgeni mümkün olan en küçük boyutuna indirgeyerek çizimi en uygun duruma getirin. Animate birleştirilmiş alanları tek bir dikdörtgen olarak yorumladığından ve sonuçta daha büyük bir toplam bölge ortaya çıkacağı için çakışan ara doldurmalardan kaçının. Animasyonu en uygun duruma getirmek için Animate'in Yeniden Çizilen Bölgeleri Göster özelliğini kullanın.
Ekrandaki film kliplerini gizlemek için _alpha = 0 ve _visible = false kullanmaktan kaçının. Bir film klibinin görünürlüğünü kapatır ya da alfa değerini sıfır olarak değiştirirseniz film yine de çizgi işleme hesaplamalarına dahil edilir ve bu da performansı etkileyebilir.
Benzer şekilde, filmi başka bir resmin arkasına yerleştirerek gizlemeye çalışmayın. Film yine de oynatıcının hesaplamalarına dahil edilir. Bunun yerine film kliplerini Stage'den (Sahne) tümüyle kaldırın ya da removeMovieClip komutunu çağırarak kaldırın.
Flash Lite, hem vektör hem de bitmap grafiklerini oluşturabilir. Her grafik türünün artıları ve eksileri vardır. Bitmap yerine vektör kullanma kararı her zaman çok net değildir ve çoğu zaman birçok etkene bağlıdır.
Vektör grafikleri, SWF dosyalarında matematiksel eşitlikler olarak sıkıştırılmış bir halde temsil edilir ve Flash Lite oynatıcısı tarafından çalışma zamanında oluşturulur. Bunun tersine, bitmap grafikleri daha fazla veri baytı gerektiren resim öğeleri dizisi (pikseller) olarak yer alır. Bu nedenle dosyada vektör grafikleri kullanmak dosya boyutunu küçültebilir ve bellek kullanımını azaltabilir.
Vektör grafikleri boyutları ölçeklendiğinde pürüzsüz şekillerini korurlar. Bitmap görüntüler ölçeklendiğinde köşeli ya da pikselli olarak görünebilirler.
Bitmap grafikleriyle karşılaştırıldıklarında, özellikle birçok karmaşık şekil ve dolgu içeren vektör grafiklerinin işlenmesi daha fazla işleme gücü gerektirir. Sonuç olarak vektör şekillerinin yoğun kullanımı bazen genel dosya performansını düşürebilir. Bitmap grafikleri vektör grafikleri kadar işleme süresi gerektirmediğinden, örneğin cep telefonlarından animasyonlu olarak görüntülenecek ve kaydırılacak karmaşık bir yol haritası gibi bazı dosyalar için daha iyi bir seçenek oluştururlar.
Aşağıdaki noktaları göz önünde bulundurun:
Vektör şekillerinde anahat kullanmaktan kaçının. Anahatlarda iç ve dış kenar vardır (dolgularda yalnızca bir kenar vardır) ve iki kat fazla işlenecek iş içerirler.
Köşeler kavislere göre daha kolay işlenir. Mümkün olduğunda, özellikle çok küçük vektör şekillerinde düz kenarlar kullanın.
En iyileştirme özellikle simge gibi bazı küçük vektör şekillerinde yardımcı olur. Karmaşık simgeler işleme sırasında ayrıntılarını kaybedebilirler ve ayrıntıları işleme işi boşa gitmiş olur.
Genel bir kural olarak küçük, karmaşık görüntüler (örneğin simgeler) için bitmap; daha büyük ve basit görüntüler için vektör kullanın.
Bitmap görüntüleri doğru boyutta içeri aktarın; dosya boyutunu ve çalıştırma zamanı belleğini artırdığı için büyük grafikleri içe aktarıp Animate'te ölçeklemeyin.
Flash Lite oynatıcısı bitmap düzgünleştirmesini desteklemez. Bitmap ölçeklenir ya da döndürülürse topaklı bir görünüm kazanacaktır. Grafiği ölçeklemeniz ya da döndürmeniz gerekiyorsa vektör grafik kullanmayı göz önünde bulundurun.
Metin çok karmaşık bir vektör şeklidir. Tabii ki çoğu zaman metin önemlidir ve hiç kullanılması çok nadirdir. Metin gerektiğinde metne animasyon uygulamaktan ya da metni bir animasyonun üzerine yerleştirmekten kaçının. Metni bitmap olarak kullanmayı göz önünde bulundurun. Çok satırlı dinamik ve girdi metni için, metin dizesinin satır sonu önbelleğe alınmaz. Animate satırları çalıştırma zamanında keser ve metin alanının her yeniden çizilmesi gerektiğinde satır sonlarını yeniden hesaplar. Durağan metin alanları soruna neden olmaz çünkü satır sonları derleme sırasında önceden hesaplanır. Dinamik içerik için dinamik metin alanlarının kullanılması kaçınılmazdır ancak mümkün olduğunda durağan metin alanları kullanmaya çalışın.
PNG dosyalarında saydamlık kullanımını en aza indirgeyin; Animate bitmap görüntüsünün saydam bölümleri için bile yeniden çizimleri hesaplamak zorundadır. Örneğin ön planda bulunan bir öğeye ilişkin saydam bir PNG dosyası söz konusuysa, saydam PNG'yi tam ekran boyutunda dışa aktarmayın. Bunun yerine ön plan öğesinin gerçek boyutunda dışa aktarın.
Bitmap katmanlarını birlikte ve vektör katmanlarını birlikte gruplamayı deneyin. Bitmap ve vektör içeriği için Animate'in farklı işleyiciler kullanması gerekir ve işleyiciler arasında geçiş yapmak zaman alır.
Bitmap kullanırken SWF dosya boyutunu küçülten görüntü sıkıştırma seçeneklerini (her görüntü için ayrı ayrı ya da tüm bitmap görüntüleri için genel olarak) ayarlayabilirsiniz.
-
-
Karmaşık renk ya da ton çeşitleri içeren fotoğraf ya da degrade dolgulu görüntüler gibi görüntüler için Photo (JPEG) seçeneğini kullanın. Bu seçenek bir JPEG dosyası üretir. İçe aktarılan görüntü için belirlenen varsayılan sıkıştırma kalitesini kullanmak için Use Imported JPEG Data (İçe Aktarılan JPEG Verilerini Kullan) onay kutusunu işaretleyin. Yeni bir sıkıştırma kalitesi ayarı belirlemek için Use Imported JPEG Data onay kutusunun işaretini kaldırın ve Quality (Kalite) metin kutusuna 1 ve 100 arasında bir değer girin. Daha yüksek bir ayar daha yüksek kaliteli bir görüntü, ancak aynı zamanda daha büyük bir dosya üretir, bu nedenle değeri buna göre ayarlayın.
Basit şekilli ve az sayıda renk içeren görüntüler için Lossless (PNG/GIF) (Kayıpsız) seçeneğini kullanın. Bu seçenek görüntüyü hiçbir veriyi atmayan kayıpsız sıkıştırma kullanarak sıkıştırır.
-
-
JPEG kalitesi sürgüsünü ayarlayın ya da bir değer girin. Daha yüksek bir JPEG kalitesi değeri daha yüksek kaliteli bir görüntü, ancak daha büyük bir SWF dosyası üretir. Daha düşük görüntü kalitesi daha küçük bir SWF dosyası üretir. Boyut ve kalite arasındaki en iyi dengeyi belirlemek için farklı ayarları deneyin.
Flash Lite uygulamasını destekleyen aygıtların çoğu, içeriği yaklaşık 15 - 20 kare/saniye (fps) hızında oynatır. Kare hızı 6 fps'ye kadar düşebilir. Geliştirme sırasında belgenin kare hızını hedef aygıtın yaklaşık oynatma hızına ayarlayın. Bu, içeriğin sınırlı performansa sahip bir aygıtta nasıl çalışacağını gösterir. Son halini almış SWF dosyasını yayınlamadan önce, aygıtın daha yüksek bir kare hızını desteklemesi durumunda performansı sınırlamamak için belgenin kare hızını en az 20 fps'ye ya da daha yükseğe ayarlayın.
Eğer gotoAndPlay komutunu kullanıyorsanız, istenen kare oynatılmadan önce geçerli kare ve istenen kare arasındaki her karenin başlatılması gerektiğini unutmayın. Bu karelerden birçoğunda farklı içerik bulunuyorsa Timeline (Zaman Çizelgesi) yerine farklı film klipleri kullanmak daha verimli olabilir.
Tüm içeriği dosyanın başına koyarak önceden yüklemek masaüstü bilgisayarlarda kullanışlı olsa da mobil aygıtlarda önceden yüklemek dosyanın başlatılmasını geciktirebilir. İçeriği dosya boyunca aralıklandırarak film kliplerinin kullanıldıklarında başlatılmasını sağlayın.
Çoğu mobil aygıttaki işleme hızı ve bellek sınırlamaları nedeniyle, mobil aygıtlarda kullanılan Flash Lite içeriği için ActionScript geliştirirken bu ilkeleri izleyin:
Dosyayı ve kodunu mümkün olduğu kadar basit tutun. Kullanılmayan film kliplerini kaldırın, gereksiz kare ve kod döngülerini silin ve çok fazla ya da ilgisiz kareler kullanmaktan kaçının.
Her etkileşimde koşul kontrol edildiği için ortaya çıkan işleme süresi nedeniyle FOR döngüleri kullanmak verimsiz olabilir. Yineleme ve döngü işleme sürelerinin yükleri birbirine yakın olduğunda, döngü kullanmak yerine birden çok işlemi ayrı ayrı yürütün. Kod daha uzun olabilir ancak performans artacaktır.
Kare temelli döngüleri artık gerek kalmadığında hemen durdurun.
Yoğun CPU kullanımı gerektirebileceği için mümkün olduğunda dize ve dizi işlemeden kaçının.
Diğer yöntem çağrılarından daha fazla işleme süresine sahip ActionScript alıcı ve ayarlayıcı yöntemlerini kullanmak yerine özelliklere her zaman doğrudan erişmeyi deneyin.
Olayları akıllıca yönetin. Bir dinleyiciyi çağırmadan önce varolduğunu (null değil) ya da olmadığını kontrol etmek için koşullar kullanarak olay dinleyici dizilerini küçük tutun. Tüm etkin aralıkları clearInterval yöntemini çağırarak temizleyin ve unloadapplication ya da removeapplicationClip yöntemini kullanarak içeriği kaldırmadan önce removeListener yöntemini çağırarak tüm etkin dinleyicileri kaldırın. Film klibi kaldırıldığında herhangi bir ActionScript işlevi SWF verilerine referans göndermeye devam ediyorsa Animate, SWF veri belleğini yeniden derlemez (örneğin, aralıklardan ve dinleyicilerden).
Değişkenlere artık gerek kalmadığında bunları silin ya da bunları çöp toplama için işaretleyen null ayarına getirin. Gereksiz varlıklar SWF dosyasından kaldırıldığı için değişkenleri silmek çalıştırma sırasında belleğin en iyi duruma getirilmesine yardımcı olur. Değişkenleri silmek null olarak ayarlamaktan daha iyidir.
Çöp toplama işleminden önce removeListener yöntemini çağırarak dinleyicileri nesnelerden kaldırın.
Bir işlev dinamik olarak çağırılıyorsa ve sabit bir parametre kümesi iletiyorsa apply yerine call yöntemini kullanın.
Başlatma süresini kısaltmak için ad boşluklarını (örneğin yolları) küçültün. Paketteki her düzey bir IF deyimine derlenir ve yeni bir Object çağrısına neden olur böylece yolda daha az düzey bulunması süre kazandırır. Örneğin com.xxx.yyy.aaa.bbb.ccc.funtionName düzeylerine sahip bir yol com.xxx.yyy.aaa.bbb.ccc için bir nesnenin başlatılmasına neden olur. Bazı Flash geliştiricileri SWF kodunu derlemeden önce yolu 58923409876.functionName gibi benzersiz bir tanımlayıcıya indirgemek için önişlemci yazılımı kullanır.
Bir dosya aynı ActionScript sınıflarını kullanan birden çok SWF dosyasından oluşuyorsa, derleme sırasında bu sınıfları seçilen SWF dosyalarından hariç tutun. Bu yöntem dosya indirme süresini kısaltmaya ve çalıştırma zamanı bellek gereksinimlerini azaltmaya yardımcı olabilir.
Nesne özelliğinde yapılan her değişiklik oynatıcının bir bildirim gönderilmesi gerekip gerekmediğini belirlemesini gerektirdiği için Object.watch ve Object.unwatch kullanmaktan kaçının.
Zaman çizelgesindeki bir anahtar karede yürütülen ActionScript kodunun tamamlanması 1 saniyeden fazla sürüyorsa o kodu birden fazla anahtar karede yürütülecek şekilde bölmeyi göz önünde bulundurun.
SWF dosyasını yayınlarken trace deyimlerini koddan kaldırın. Bunu yapmak için Publish Settings (Yayınlama Ayarları) iletişim kutusundaki Flash sekmesinde bulunan Omit Trace Actions (İzleme Eylemlerini Hariç Tut) onay kutusunu işaretleyin.
Devralmak yöntem çağırma sayısını artırır ve daha fazla bellek kullanır: gerek duyduğu tüm işlevleri içeren bir sınıf, bazı işlevlerini üst sınıftan devralan bir sınıfa göre çalıştırma zamanında daha verimlidir. Bu nedenle sınıfların genişletilebilirliği ve kodun verimliliği arasında bir tasarım dengesi kurmanız gerekebilir.
Bir SWF dosyası özel bir ActionScript sınıfı içeren (örneğin foo.bar.CustomClass) başka bir SWF dosyasını yükler daha sonra kaldırırsa sınıf tanımlaması bellekte kalır. Bellekten kazanmak için kaldırılan SWF dosyalarındaki tüm özel sınıfları silin. Bunun için delete deyimini kullanın ve tam nitelikli bir sınıf adı belirleyin, örneğin: delete foo.bar.CustomClass.
Genel değişkenlerin kullanımını sınırlayın; bunları tanımlayan film klibi kaldırılırsa bu değişkenler çöp toplama için işaretlenmezler.
Standart kullanıcı arabirimi bileşenlerini (Flash'taki Components (Bileşenler) panelinde bulunur) kullanmaktan kaçının. Bu bileşenler masaüstü bilgisayarlarda çalışacak şekilde tasarlanmışlardır ve mobil aygıtlarda çalışmak üzere en uygun duruma getirilmemişlerdir.
Mümkün olduğunda derin yuvalanmış işlevlerden kaçının.
Mümkün olduğunda derin yuvalanmış işlevlerden kaçının. Flash Player uygulamasının masaüstü sürümüyle karşılaştırıldığında Flash Lite 2, varolmayan değişkenlere ilişkin referansları yavaş şekilde arar, bu da performansı belirgin şekilde etkileyebilir.
İşlevleri adsız sözdizimi kullanarak tanımlamaktan kaçının. Örneğin myObj.eventName = function{ ...}. Örneğin function myFunc { ...}; my Obj.eventName = myFunc; gibi açıkça tanımlanmış işlevler daha verimlidir.
Math işlevlerinin ve yüzen nokta sayılarının kullanımını en aza indirgeyin. Bu değerleri hesaplamak performansı yavaşlatır. Math rutinlerini kullanmanız gerekiyorsa değerleri önceden hesaplamayı ve bir değişkenler dizisinde depolamayı göz önünde bulundurun. Verileri bir veri tablosundan almak Flash'ın bunları çalıştırma zamanında hesaplamasından çok daha hızlıdır.
Flash Lite, bir dosyanın artık referans vermediği nesneleri ve değişkenleri bellekten düzenli aralıklarla kaldırır. Bu işlem çöp toplama olarak bilinir. Flash Lite, çöp toplama işlemini her 60 saniyede bir veya dosya bellek kullanımı aniden %20 ya da daha üstüne çıktığında çalıştırır.
Flash Lite uygulamasının çöp toplama işlemini nasıl ve ne zaman yapacağını kontrol edemeseniz de ihtiyaç duymadığınız belleği istediğinizde boşaltabilirsiniz. Zaman çizelgesi değişkenleri ya da genel değişkenler için, ActionScript nesnesinin kullandığı belleği boşaltmak için delete deyimini kullanın. Yerel değişkenler için, örneğin bir işlev tanımı içinde tanımlanmış bir değişken için, bir nesnenin belleğini boşaltmak üzere delete deyimini kullanamazsınız ancak bu nesneye referans gönderen değişkeni null olarak ayarlayabilirsiniz. Bu işlem, nesneye başka referans olmaması koşuluyla nesnenin kullandığı belleği boşaltır.
Aşağıdaki iki kod örneği, nesne belleklerinin, o nesnelere referans gönderen değişkeni silerek nasıl boşaltılacağını göstermektedir. İlk örneğin bir zaman çizelgesi değişkeni ve ikincisinin bir genel değişken oluşturması dışında bu örnekler aynıdır.
// First case: variable attached to a movie or // movie clip timeline // // Create the Date object. var mcDateObject = new Date(); // Returns the current date as a string. trace(mcDateObject); // Delete the object. delete mcDateObject; // Returns undefined. trace(mcDateObject); // // Second case: global variable attached to a movie or // movie clip timeline // // Create the Date object. _global.gDateObject = new Date(); // Returns the current date as a string. trace(_global.gDateObject); // Delete the object. delete _global.gDateObject; // Returns undefined. trace(_global.gDateObject);
Daha önce belirtildiği gibi yerel bir işlev değişkeninin kullandığı belleği boşaltmak için delete deyimini kullanamazsınız. Bunun yerine değişken referansını null olarak ayarlayın, bu delete ile aynı etkiye sahiptir.
function func() { // Create the Date object. var funcDateObject = new Date(); // Returns the current date as a string. trace(funcDateObject); // Delete has no effect. delete funcDateObject; // Still returns the current date. trace(funcDateObject); // Set the object reference to null. funcDateObject = null; // Returns null. trace(funcDateObject); } // Call func() function. func();
Mobil aygıtlar için dosya geliştirirken bir defada yüklemeyi hedefleyeceğiniz veri miktarını en aza indirgeyin. Flash Lite dosyasına harici veri yüklüyorsanız (örneğin, XML.load kullanarak), gelen veri için yetersiz bellek ayrılmışsa aygıtın işletim sistemi “bellek arızası” hatası verebilir. Kalan belleğin toplam miktarı yeterli olsa da bu durum ortaya çıkabilir.
Örneğin, bir dosyanın 100 KB olan bir XML dosyası yüklemeyi denediğini ancak aygıtın işletim sisteminin gelen veri akışını işlemek için yalnızca 30 KB ayırdığını varsayın. Bu durumda Flash Lite, kullanıcıya yeterli bellek olmadığını belirten bir hata mesajı görüntüler.
Büyük miktarda veri yüklemek için veriyi küçük parçalar halinde, örneğin birkaç XML dosyasında gruplayın ve her parça için birkaç veri yükleme çağrısı yapın. Her veri parçasının boyutu ve buna bağlı olarak yapmanız gereken veri yükleme çağrısı sayısı aygıta ve dosyaya göre değişir. Veri isteği sayısı ve bellek arızası arasında uygun bir denge belirlemek için dosyaları çeşitli hedef aygıtlarda test edin.
En uygun performans için mümkünse XML dosyalarını yüklemekten ve bölümlere ayırmaktan kaçının. Bunun yerine verileri basit ad/değer çiftlerinde depolayın ve verileri loadVars kullanarak bir metin dosyasından ya da daha önce derlenmiş SWF dosyalarından yükleyin.
Bir SWF dosyasının boyutunu küçültmek için sınıfları derlemenin dışında tutmayı ancak yazım kontrolü için bunlara erişme ve bunları kullanma yeteneğini korumayı göz önünde bulundurun. Örneğin, özellikle aynı sınıflardan birçoğuna erişenler olmak üzere, birden çok SWF dosyası ya da paylaşılan kitaplık kullanan bir dosya geliştiriyorsanız bunu deneyin. Sınıfları hariç tutmak o dosyalarda sınıfların yinelenmesini önlemeye yardımcı olur.
-
-
<excludeAssets> <asset name=”className1” /> <asset name=”className2” /> </excludeAssets>
Burada <asset> etiketlerindeki ad nitelikleri için belirlenen değerler SWF dosyasının dışında tutulması gereken sınıfların adlarıdır. Dosya için gerektiği kadar ekleyin. Örneğin aşağıdaki XML dosyası mx.core.UIObject ve mx.screens.Slide sınıflarını SWF dosyasının dışında tutar:
<excludeAssets> <asset name=”mx.core.UIObject” /> <asset name=”mx.screens.Slide” /> </excludeAssets>