Görüntüleme nesnelerini önbelleğe alma

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

İster bir uygulama, isterse karmaşık komut dosyaları yazılmış animasyonlar oluşturun, Flash uygulamasındaki tasarımlarınızın boyutu arttıkça, performans ve en iyileştirmeyi göz önünde bulundurmanız gerekir. Statik kalan bir içeriğiniz (örn. dikdörtgen bir Shape örneği) olduğunda, Flash Player ve AIR uygulaması içeriği en iyileştirmez. Bu nedenle, dikdörtgenin konumunu değiştirdiğinizde, Flash Player veya AIR uygulaması Shape örneğinin tamamını yeniden çizer.

SWF dosyanızın performansını artırmak için, belirtilen görüntüleme nesnelerini önbelleğe alabilirsiniz. Görüntüleme nesnesi, bir yüzeydir , temel olarak örneğin vektör verilerinin bir bitmap sürümü olup SWF dosyanızın akışı sırasında çok da değiştirmek istemediğiniz verilerdir. Bu nedenle, önbelleğe almanın etkinleştirilmiş olduğu örnekler, SWF dosyası oynatıldıkça sürekli olarak yeniden çizilmez, bu da SWF dosyasının hızlı şekilde oluşturulmasını sağlar.

Not: Vektör verilerini güncelleyebilirsiniz, bu sürede yüzey yeniden oluşturulur. Dolayısıyla, yüzeyde önbelleğe alınan vektör verilerinin SWF dosyasının tamamında aynı kalması gerekmez.

Görüntüleme nesnesinin cacheAsBitmap özelliği true değerine ayarlandığında, görüntüleme nesnesinin kendi bitmap temsilini önbelleğe alması sağlanır. Flash Player veya AIR uygulaması, örnek için bir yüzey nesnesi oluşturur ve bu nesne vektör verisi yerine önbelleğe alınmış bir bitmap'tir. Görüntüleme nesnesinin sınırlarını değiştirirseniz, yüzey yeniden boyutlandırılmaz, yeniden oluşturulur. Yüzeyler diğer yüzeylerin içinde yuvalanabilir. Alt yüzey, bitmap'ini üst yüzeyinin üzerine kopyalar. Daha fazla bilgi için, bkz. Bitmap önbelleğe almayı etkinleştirme .

DisplayObject sınıfının opaqueBackground özelliği ile scrollRect özelliği, cacheAsBitmap özelliği kullanılarak bitmap'in önbelleğe alınmasıyla ilgilidir. Bu üç özellik birbirinden bağımsız olsa da, opaqueBackground ve scrollRect özellikleri, bir nesne önbelleğe alındığında en iyi şekilde çalışır—yalnızca cacheAsBitmap öğesini true değerine ayarladığınızda opaqueBackground ve scrollRect özellikleri için performans avantajı elde edersiniz. Görüntüleme nesnesi içeriğini kaydırma hakkında daha fazla bilgi için, bkz. Görüntüleme nesnelerini yatay ve dikey kaydırma . Opak bir arka plan ayarlama hakkında daha fazla bilgi almak için, bkz. Opak bir arka plan rengi ayarlama .

cacheAsBitmap özelliğini true değerine ayarlamanızı gerektiren, alfa kanalı maskeleme hakkında bilgi almak için, bkz. Görüntüleme nesnelerini maskeleme .

Önbelleğe alma ne zaman etkinleştirilmeli

Görüntüleme nesnesi için önbelleğe alma etkinleştirildiğinde bir yüzey oluşturulur ve bu da karmaşık vektör animasyonlarının daha hızlı oluşturulmasına yardımcı olma gibi birçok avantaj sağlar. Önbelleği etkinleştirmek isteyeceğiniz birçok senaryo vardır. SWF dosyalarınızın performansını artırmak için önbelleğe almayı her zaman etkinleştirmek isteyeceğiniz düşünülebilir ancak önbelleğe almanın etkinleştirilmesinin performansı artırmadığı, hatta düşürdüğü durumlar da vardır. Bu bölümde, önbelleğe almanın kullanılması gereken senaryolar açıklanmakta ve normal görüntüleme nesnelerinin ne zaman kullanılması gerektiği anlatılmaktadır.

Önbelleğe alınan verilerin genel performansı, örneğinizin vektör verilerinin ne kadar karmaşık olduğuna, verinin ne kadarını değiştirmek istediğinize ve opaqueBackground özelliğini ayarlayıp ayarlamamanıza bağlıdır. Küçük bölgeleri değiştiriyorsanız, yüzey kullanma ile vektör verilerini kullanma arasındaki fark göz ardı edilebilir. Uygulamayı konuşlandırmadan önce çalışmanızla iki senaryoyu da test etmek isteyebilirsiniz.

Bitmap önbelleğe alma ne zaman kullanılmalı

Aşağıda, bitmap önbelleğe almayı etkinleştirdiğinizde önemli avantajlar elde edebileceğiniz tipik senaryolara yer verilmiştir.

  • Karmaşık·arka·plan·görüntüsü:·Vektör·verilerinin·ayrıntılı·ve·karmaşık·bir·arka·plan·görüntüsünü·içeren·bir·uygulama·(belki·de·bitmap'i izle komutunu uyguladığınız bir görüntü ya da Adobe Illustrator® uygulamasında oluşturduğunuz bir resim). Karakterlere arka plan üzerinde animasyon uygulayabilirsiniz, arka planın devamlı olarak vektör verilerini yeniden oluşturması gerektiğinden bu animasyonu yavaşlatır. Performansı artırmak için, arka plan görüntüleme nesnesinin opaqueBackground özelliğini true değerine ayarlayabilirsiniz. Arka plan bitmap olarak oluşturulur ve hızlı şekilde yeniden çizilebilir, böylece animasyonunuz da daha hızlı oynatılır.

  • Metin alanını kaydırma: Kaydırılan metin alanında büyük miktarda metin görüntüleyen bir uygulama. Kaydırma sınırlarıyla ( scrollRect özelliği) metin alanını kaydırılabilir olarak ayarladığınız bir görüntüleme nesnesine yerleştirebilirsiniz. Böylece belirtilen örnek için hızlı piksel kaydırması sağlanır. Kullanıcı bir görüntüleme nesnesi örneğini kaydırdığında, Flash Player veya AIR uygulaması kaydırılan pikselleri yukarı kaydırır ve metin alanının tamamını yeniden oluşturmak yerine yeni gösterilen bölgeyi oluşturur.

  • Pencereleme sistemi: Örtüşen pencerelerin karmaşık sistemini içeren bir uygulama. Her pencere açılabilir veya kapatılabilir (örneğin, web tarayıcısı pencereleri). Pencerelerin her birini bir yüzey olarak işaretlerseniz ( cacheAsBitmap özelliğini true değerine ayarlayarak), her pencere ayrılır ve önbelleğe alınır. Kullanıcılar, pencereleri birbiriyle örtüşecek şekilde sürükleyebilir ve pencerelerin her birinin vektör içeriğini yeniden oluşturması gerekmez

  • Alfa kanalı maskeleme: Alfa kanalı maskelemeyi kullandığınızda, cacheAsBitmap özelliğini true değerine ayarlamanız gerekir. Daha fazla bilgi için, bkz. Görüntüleme nesnelerini maskeleme .

Bu senaryoların tümünde bitmap önbelleğe almanın etkinleştirilmesi, vektör grafiklerini en iyileştirerek uygulamanın yanıt verme hızını artırıp etkileşimini geliştirir.

Ayrıca bir görüntüleme nesnesine her filtre uyguladığınızda, cacheAsBitmap öğesini açıkça false değerine ayarlasanız da bu öğe otomatik olarak true değerine ayarlanır. Görüntüleme nesnesinden tüm filtreleri temizlerseniz, cacheAsBitmap özelliği en son ayarlandığı değere döndürülür.

Bitmap önbelleğe almayı kullanmaktan ne zaman kaçınmalı

Bu özelliğin yanlış koşullarda kullanılması SWF dosyanızın performansını olumsuz yönde etkileyecektir. Bitmap önbelleğe almayı kullanırken şu yönergeleri unutmayın:

  • Yüzeyleri aşırı kullanmayın (önbellek etkinleştirilmiş görüntüleme nesneleri). Her yüzey normal bir görüntüleme nesnesinden daha fazla bellek tüketir, başka bir deyişle, yalnızca oluşturma performansını artırmanız gerektiğinde yüzeyleri etkinleştirmeniz gerekir.

    Önbelleğe alınan bir bitmap, normal bir görüntüleme nesnesinden çok daha fazla bellek kullanabilir. Örneğin, Sahne Alanı'ndaki bir Sprite örneğinin boyutu 250 piksel x 250 pikselse, bu örnek önbelleğe alındığında, normal (önbelleğe alınmamış) bir Sprite örneği olduğunda kullandığı 1 KB yerine 250 KB bellek kullanabilir.

  • Önbelleğe alınan yüzeyleri yakınlaştırmaktan kaçının Bitmap önbelleğe almayı fazla kullanırsanız, özellikle içeriğin üzerine yakınlaştırırsanız çok miktarda bellek kullanılır. (Bir önceki madde imine bakın.)

  • Büyük ölçüde statik olan (animasyon uygulanmamış) görüntüleme nesnesi örnekleri için yüzeyleri kullanın. Örneği sürükleyebilir veya taşıyabilirsiniz ancak örneğin içeriklerine çok fazla animasyon uygulanmaması veya içeriklerin değiştirilmemesi gerekir. (Animasyon veya değişen içerik, animasyon ya da Video örneği içeren bir MovieClip örneğine çok benzer.) Örneğin, bir örneği döndürürseniz veya dönüştürürseniz, örnek, yüzey ve vektör verisi arasında değişir, bunu işlemek zordur ve SWF dosyanızı olumsuz yönde etkiler.

  • Yüzeyleri vektör verileriyle karıştırırsanız, Flash Player ve AIR (ve bazen de bilgisayar) için gerekli işleme miktarı artırılır. Yüzeyleri olabildiğince (örneğin, pencereleme uygulamaları oluşturduğunuzda) bir arada gruplayın.

  • Grafikleri sık aralıklarla değişen nesneleri ön belleğe almayın. Görüntüleme nesnesi her ölçeklendirildiğinde, eğildiğinde, döndürüldüğünde, alfa veya renk dönüştürme değeri değiştirildiğinde, görüntülenen nesnelerin alt öğeleri taşındığında veya grafik özelliği kullanılarak çizim yapıldığında, bitmap ön belleği yeniden çizilir. Bunun her karede olması durumunda, çalışma zamanının nesneyi bir bitmap'e çizmesi ve ardından bu bitmap'i sahne alanına kopyalaması gerekir -ki bu da sadece ön belleğe alınmamış nesnenin sahne alanına çizilmesine kıyasla fazladan çalışmaya neden olur. Güncelleme sıklığı ile ön belleğe alma arasındaki performans farkı görüntü nesnesinin karmaşıklığına ve boyutuna bağlıdır ve sadece belirli bir içerik test edilerek belirlenebilir.

Bitmap önbelleğe almayı etkinleştirme

Bir görüntüleme nesnesi için bitmap önbelleğe almayı etkinleştirmek üzere, nesnenin cacheAsBitmap özelliğini true değerine ayarlarsınız:

mySprite.cacheAsBitmap = true;

cacheAsBitmap özelliğini true değerine ayarladıktan sonra, görüntüleme nesnesinin otomatik olarak pikselleri koordinatların tamamına birleştirdiğini fark edebilirsiniz. SWF dosyasını test ettiğinizde, karmaşık bir vektör görüntüsünde gerçekleştirilen herhangi bir animasyonun daha hızlı şekilde oluşturulduğunu görmeniz gerekir.

cacheAsBitmap öğesi true ayarına getirilse de, aşağıdakilerden biri veya birkaçı oluştuğunda bir yüzey (önbelleğe alınmış bitmap) oluşturulmaz:

  • Bitmap, en az 2880 piksel yükseklikte veya genişlikte olduğunda.

  • Bitmap bellek ayırmayı başaramadığında (yetersiz bellek hatası nedeniyle).

Ön bellekteki bitmap dönüştürme matrisleri

Taşınabilir cihazlar için AIR uygulamalarında, cacheAsBitmap özelliğini her ayarladığınızda cacheAsBitmapMatrix özelliğini de ayarlamanız gerekir. Bu özelliği ayarlamanız daha geniş bir aralıktaki dönüştürmeleri, yeniden oluşturmayı tetiklemeden, görüntü nesnesine uygulayabilmenizi sağlar.

mySprite.cacheAsBitmap = true; 
mySprite.cacheAsBitmapMatrix = new Matrix();

Bu matrix özelliğini ayarladığınızda aşağıdaki ek dönüştürmeleri de görüntü nesnesini yeniden ön belleğe almadan, nesneye uygulayabilirsiniz.

  • Piksel yapışması olmadan taşıma veya çevirme

  • Döndürme

  • Ölçekleme

  • Eğme

  • Alfa değerini değiştirme (%0 ila 100 arasında saydamlık)

Bu dönüştürmeler ön belleğe alınan bitmap'e doğrudan uygulanır.