Aracılığıyla paylaş


Animasyon (DirectComposition)

Not

Windows 10'daki uygulamalar için DirectComposition yerine Windows.UI.Composition API'lerini kullanmanızı öneririz. Daha fazla bilgi için bkz. Görsel katmanını kullanarak masaüstü uygulamanızı modernleştirme.

Bu konu başlığında Microsoft DirectComposition animasyonunun temelleri açıklanmaktadır. Aşağıdaki konuları içerir:

Animasyon nedir?

Animasyon, her değişiklik yapıldıktan sonra görseli yeniden çizerken belirli bir süre boyunca görselde hızlı bir şekilde artımlı değişiklikler yaparak oluşturulan optik bir illüzyondur. Yeniden çizimler hızlı bir şekilde gerçekleştiğinden, beyin artımlı değişiklikleri bir film veya canlı aksiyon videosunda olduğu gibi tek bir değişen sahne olarak algılar.

Aşağıdaki tabloda, animasyon kullanmanın bazı tipik yolları açıklanmaktadır.

Animasyon Açıklama
Kaydırma Kaydırma listesi denetimine fizik öykünme ivmesi gibi özellikler eklemek için animasyon kullanın.
Sahne geçişleri Bir iş akışındaki görevler arasında süreklilik sağlayan gezinti sahnesi geçişleri oluşturmak için animasyon kullanın. Gezinti sahnesi geçişleri, kullanıcıya nerede olduğunu, nerede olduğunu ve bir sonraki adımda nereye gitmesi gerektiğini gösteren bağlam sağlar.
Çapraz pencere etkileşimleri Farklı uygulamaların kullanıcı arabirimi öğelerine, kullanıcının bir uygulamadan diğerine geçmeyi içeren görevleri tamamlamasına yardımcı olmak için aralarında sorunsuz süreklilik algısı sağlayacak şekilde animasyon ekleyin.

 

Animasyonlu olabilecek özellikler

DirectComposition'da, görseli tanımlayan nesnelerin tek tek özelliklerine animasyon uygulayarak görsele animasyon eklersiniz. Örneğin, bir görseli ekranda yatay olarak taşımak istiyorsanız, görselin OffsetX özelliğine animasyon uygularsınız. Benzer şekilde, bir görselin basit bir animasyonlu 2B döndürmesini yapmak isterseniz, 2B dönüştürme nesnesinin Angle özelliğine animasyon uygular ve ardından 2B dönüştürme nesnesini görselin Transform özelliğine uygularsınız.

DirectComposition, skaler değer alan herhangi bir nesne özelliğine animasyon uygulamanızı sağlar. Birden çok özelliğe ve birden çok nesneye eşzamanlı animasyonlar uygulayabilirsiniz.

DirectComposition, animasyonları ayrı bir iş parçacığında çalıştırır. Oluşturma altyapısı animasyonları uygun kare hızında çalıştırırken bir animasyon veya animasyon kümesi başlatabilir ve ardından uygulama iş parçacıklarınızda başka işler yapabilir, hatta iş parçacıklarını uyku moduna geçirebilirsiniz.

Animasyon işlevleri

DirectComposition, tanımladığınız bir animasyon işlevini temel alarak nesne özelliğine animasyon ekler. animasyon işlevi, bir nesne özelliğinin değerinin belirli bir süre içinde nasıl değiştiğini belirten bir yapıdır. Örneğin, bir özelliğin değerini 4 saniye boyunca 1'den 360'a değiştiren bir animasyon işlevi tanımlayabilirsiniz. Ardından, animasyon işlevini bir 2B döndürme dönüştürme nesnesinin Angle özelliğine uygular ve ardından dönüştürme nesnesini bir görselin Transform özelliğine uygularsanız, animasyon işlevi görseli 4 saniye boyunca tam bir daire içinde döndürür.

Animasyon işlevi, IDCompositionDevice::CreateAnimation yöntemine yapılan çağrı tarafından oluşturulan animasyon nesnesi temsil edilir. Animasyon nesnesinin IDCompositionAnimation arabiriminin yöntemlerini kullanarak animasyon işlevini tanımlayan diziye birer birer animasyon kesimleri ekleyerek animasyon işlevi oluşturursunuz. Bir segment eklerken, animasyon işlevinin başlangıcına göre segmentin başlangıç zamanını işaretleyen sıfır tabanlı bir uzaklık belirtirsiniz. Animasyon kesimleri, başlangıç saatlerinin artan sırasına göre eklenmelidir. Başlangıç zamanı önceki veya önceki bir kesime eşit olan bir animasyon kesimi ekleme girişimi başarısız olur. Animasyon işlevi, işlevin ne zaman sona ereceğini belirten belirtilen bir bitiş zamanına sahip olabilir.

Aksi belirtilmediği sürece, Masaüstü Pencere Yöneticisi (DWM) animasyonu yürütmek için komutu aldığında bir animasyon işlevi başlatılır. Her segment, sonraki segmentin başlangıç zamanına ulaşılana kadar çalışır. Segmentler arasındaki animasyonlu özellik değerinde gerçekleşen kesintili değişiklikler ayrık değişiklikler olarak kabul edilir.

Özellik değerini, animasyon işlevini temsil eden animasyon nesnesinin IDCompositionAnimation işaretçisine ayarlayarak bir özelliğe animasyon işlevi uygularsınız. Aynı animasyon nesnesi, aynı nesnenin birden çok özelliğine ve aynı cihaz tarafından oluşturulan diğer nesnelerin özelliklerine uygulanabilir.

Animasyon kesimleri

Animasyon kesimleri, bir animasyon işlevinin temel zamanlama tanımlarıdır; bunlar, daha karmaşık ve daha üst düzey animasyon işlevlerinin oluşturulduğu ilkel öğelerdir. Animasyon kesimi, animasyon işlevinin başlangıcına göre işlevi ve segmentin başladığı zamanı açıklayan bir dizi parametreden oluşturulur. Her segment için, zaman (t) yatay eksen boyunca ilerler ve t = 0'da başlar.

Segment küp

Bir kübik segmentin zamanlaması bir kübik polinom ile tanımlanır. Belirli bir zaman girişi için (t), çıkış değeri aşağıdaki denklem tarafından verilir:

x(t) = ³ + bt² + ct + d

Aşağıdaki diyagramda iki kübik segment içeren bir animasyon işlevi gösterilmektedir. İlk segment değeri 4 saniye boyunca 0'dan 16'ya, ikinci segment ise sonraki 4 saniye boyunca doğrusal olarak 16'dan 0'a değiştirir. İlk geçiş bu kübik polinom boyunca gerçekleşir:

x(t) = t³ - 6t² + 12t

ve ikinci geçiş şu şekilde gerçekleşir:

x(t) = - 4t + 16

diyagramı

IDCompositionAnimation::AddCubic yöntemini kullanarak animasyon işlevine bir küp segment eklersiniz.

Sinüsoid segmenti

Bir sinüsoid segmentin zamanlaması aşağıdaki denklemle tanımlanır:

x(t) = Sapma + Genlik * sin(t*Frekans*2*PI + Faz*PI/180.0)

IDCompositionAnimation::AddSinusoidal yöntemini kullanarak animasyon işlevine sinüsoid segmenti eklersiniz.

Segmenti yinele

Yineleme kesimi, animasyon işlevinin belirtilen bir önceki bölümünü yineler. Yineleme kesimi, animasyon işlevinin belirtilen bölümünün bir sonraki segmentle karşılaşılana veya animasyonun belirtilen sonuna ulaşılana kadar süresiz olarak döngüye çıkmasına neden olur. Animasyonun önceki bölümü, diğer yineleme segmentleri de dahil olmak üzere diğer segmentlerden oluşur. Yineleme segmenti, animasyon işlevinde ilk segment olarak kullanılamaz.

Aşağıdaki diyagramda her biri 4 saniyelik iki kübik parçadan oluşan bir animasyon işlevi ve ardından 12 saniye süren bir yineleme kesimi gösterilmektedir. Yineleme segmenti animasyonda 8 saniye başlar ve son segmente 20 saniye ulaşılana kadar animasyonun önceki 6 saniyesini iki kez yineler.

İki kübik segment ve bir yineleme segmenti içeren animasyon işlevinin diyagramını

Animasyon işlevine yineleme kesimi eklemek için IDCompositionAnimation::AddRepeat yöntemini kullanın.

Bitiş segmenti

Segmentlerden bir animasyon işlevi oluşturduğunuzda, animasyon işlevinin belirli bir zamanda bitmesini sağlamak için bir bitiş kesimi ekleyebilirsiniz. Bir bitiş kesimi eklemezseniz, animasyon işlevinin son kesimi süresiz olarak çalışır.

IDCompositionAnimation::End yöntemini çağırarak, işlevin bitiş noktasını gösteren animasyon işlevinin başından bir uzaklık belirterek bir bitiş kesimi eklersiniz. Uzaklık, önceki segmentin başlangıç uzaklığından büyük olmalıdır. Ayrıca bir son segment, animasyon işlevindeki ilkel öğe olarak kullanılamaz.

Endçağırdığınızda, animasyonlu özellik için son bir değer de belirtirsiniz. özelliği, animasyon işlevinin bitiş noktasına ulaşıldığında belirtilen son değere ayarlanır.

Bir bitiş kesimi ekledikten sonra animasyon işlevine başka kesim ekleyemezsiniz. Diğer bir ifadeyle, IDCompositionAnimation::Resetdışında animasyon nesnesinde tüm yöntem çağrıları başarısız olur. Sıfırlama çağrılması, animasyon nesnesini animasyon işlevinin segment içermediği temiz duruma döndürür ve bu noktada bir kez daha segment ekleyebilirsiniz.

Windows Animasyon Yöneticisi ile uyumluluk

Windows Animasyon Yöneticisi (Windows Animasyon), animasyon temel öğelerini DirectComposition API'siyle uyumlu bir biçimde çıkarmaktadır. Bu, DirectComposition'ın Windows Animasyonu tarafından oluşturulan animasyon temel öğelerini temel alan animasyonlar oluşturabileceği anlamına gelir.

Daha fazla bilgi için bkz. Windows Animasyon Yöneticisi, IUIAnimationVariable2::GetCurve yöntemi ve DirectComposition Animasyonunu Windows Animation Manager v2 ile Yönetme.

DirectComposition Kavramları