Gambaran Umum Sistem Animasi dan Pengaturan Waktu

Topik ini menjelaskan bagaimana sistem waktu menggunakan animasi, Timeline, dan Clock kelas untuk menganimasikan properti.

Prasyarat

Untuk memahami topik ini, Anda harus dapat menggunakan animasi WPF untuk menganimasikan properti, seperti yang dijelaskan dalam Gambaran Umum Animasi. Ini juga membantu untuk terbiasa dengan properti dependensi; untuk informasi selengkapnya, lihat Gambaran Umum Properti Dependensi.

Garis Waktu dan Jam

Gambaran Umum Animasi menjelaskan bagaimana mewakili Timeline segmen waktu, dan animasi adalah jenis Timeline yang menghasilkan nilai output. Dengan sendirinya, Timeline, tidak melakukan apa pun selain hanya menggambarkan segmen waktu. Ini adalah objek garis Clock waktu yang melakukan pekerjaan nyata. Demikian juga, animasi sebenarnya tidak menganimasikan properti: kelas animasi menjelaskan bagaimana nilai output harus dihitung, tetapi itu adalah Clock yang dibuat untuk animasi yang mendorong output animasi dan menerapkannya ke properti.

adalah Clock jenis objek khusus yang mempertahankan status run-time terkait waktu untuk Timeline. Ini menyediakan tiga bit informasi yang penting untuk animasi dan sistem waktu: CurrentTime, CurrentProgress, dan CurrentState. A Clock menentukan waktu, kemajuan, dan statusnya saat ini dengan menggunakan perilaku waktu yang dijelaskan oleh : , Duration, RepeatBehaviorAutoReverse, dan sebagainyaTimeline.

Dalam kebanyakan kasus, Clock dibuat secara otomatis untuk garis waktu Anda. Saat Anda menganimasikan dengan menggunakan Storyboard metode atau BeginAnimation , jam secara otomatis dibuat untuk garis waktu dan animasi Anda dan diterapkan ke properti yang ditargetkan. Anda juga dapat membuat Clock secara eksplisit dengan menggunakan CreateClock metode Timeline. Metode ini MediaTimeline.CreateClock membuat jam dengan jenis yang sesuai untuk Timeline tempat metode tersebut dipanggil. Timeline Jika berisi garis waktu anak, itu juga membuat Clock objek untuk mereka. Objek yang dihasilkan Clock disusun di pohon yang cocok dengan struktur Timeline pohon objek tempat objek dibuat.

Ada berbagai jenis jam untuk berbagai jenis garis waktu. Tabel berikut ini memperlihatkan Clock tipe yang sesuai dengan beberapa jenis yang berbeda Timeline .

Jenis garis waktu Jenis jam Tujuan jam
Animasi (mewarisi dari AnimationTimeline) AnimationClock Menghasilkan nilai output untuk properti dependensi.
MediaTimeline MediaClock Memproses file media.
ParallelTimeline ClockGroup Mengelompokkan dan mengontrol objek turunannya Clock
Storyboard ClockGroup Mengelompokkan dan mengontrol objek turunannya Clock

Anda dapat menerapkan objek apa pun AnimationClock yang Anda buat ke properti dependensi yang kompatibel dengan menggunakan metode .ApplyAnimationClock

Dalam skenario intensif performa, seperti menganimasikan sejumlah besar objek serupa, mengelola penggunaan Anda sendiri Clock dapat memberikan manfaat performa.

Jam dan Manajer Waktu

Saat Anda menganimasikan objek di WPF, ini adalah manajer waktu yang mengelola Clock objek yang dibuat untuk garis waktu Anda. Manajer waktu adalah akar pohon Clock objek dan mengontrol aliran waktu di pohon itu. Manajer waktu secara otomatis dibuat untuk setiap aplikasi WPF dan tidak terlihat oleh pengembang aplikasi. Manajer waktu "berdetak" berkali-kali per detik; jumlah aktual tick yang terjadi setiap detik bervariasi tergantung pada sumber daya sistem yang tersedia. Selama masing-masing kutu ini, manajer waktu menghitung status semua ActiveClock objek di pohon waktu.

Ilustrasi berikut menunjukkan hubungan antara manajer waktu, dan AnimationClock, dan properti dependensi animasi.

Timing system components and the time manager.
Menganimasikan properti

Ketika manajer waktu berdetak, manajer waktu memperbarui waktu setiap ActiveClock dalam aplikasi. Clock Jika adalah AnimationClock, ia menggunakan GetCurrentValue metode dari AnimationTimeline mana ia dibuat untuk menghitung nilai output saat ini. memasok AnimationClockAnimationTimeline dengan waktu lokal saat ini, nilai input, yang biasanya merupakan nilai dasar properti, dan nilai tujuan default. Ketika Anda mengambil nilai yang dianimasikan oleh properti menggunakan GetValue metode atau aksesor CLR-nya, Anda mendapatkan output dari .AnimationClock

Grup Jam

Bagian sebelumnya menjelaskan bagaimana ada berbagai jenis Clock objek untuk berbagai jenis garis waktu. Ilustrasi berikut menunjukkan hubungan antara manajer waktu, ClockGroup, , AnimationClockdan properti dependensi animasi. ClockGroup dibuat untuk garis waktu yang mengelompokkan garis waktu lain, seperti Storyboard kelas, yang mengelompokkan animasi dan garis waktu lainnya.

Timing system components with the time manager and dependency properties.
Grup Jam

Komposisi

Dimungkinkan untuk mengaitkan beberapa jam dengan satu properti, dalam hal ini setiap jam menggunakan nilai output jam sebelumnya sebagai nilai dasarnya. Ilustrasi berikut menunjukkan tiga AnimationClock objek yang diterapkan ke properti yang sama. Clock1 menggunakan nilai dasar properti animasi sebagai inputnya dan menggunakannya untuk menghasilkan output. Clock2 mengambil output dari Clock1 sebagai inputnya dan menggunakannya untuk menghasilkan output. Clock3 mengambil output dari Clock2 sebagai inputnya dan menggunakannya untuk menghasilkan output. Ketika beberapa jam mempengaruhi properti yang sama secara bersamaan, mereka dikatakan berada dalam rantai komposisi.

Timing system components composed with multiple dependency properties.
Rantai komposisi

Perhatikan bahwa meskipun hubungan dibuat di antara input dan output AnimationClock objek dalam rantai komposisi, perilaku pengaturan waktunya tidak terpengaruh; Clock objek (termasuk AnimationClock objek) memiliki dependensi hierarkis pada objek induknya Clock .

Untuk menerapkan beberapa jam ke properti yang sama, gunakan ComposeHandoffBehavior saat menerapkan Storyboard, animasi, atau AnimationClock.

Tick dan Konsolidasi Peristiwa

Selain menghitung nilai output, manajer waktu melakukan pekerjaan lain setiap kali berdetak: ini menentukan status setiap jam dan menaikkan peristiwa yang sesuai.

Sementara kutu sering terjadi, ada kemungkinan banyak hal terjadi di antara kutu. Misalnya, Clock mungkin dihentikan, dimulai, dan dihentikan lagi, dalam hal ini nilainya CurrentState akan berubah tiga kali. Secara teori, CurrentStateInvalidated peristiwa dapat dimunculkan beberapa kali dalam satu centang; namun, mesin waktu mengonsolidasikan peristiwa, sehingga CurrentStateInvalidated peristiwa dapat dinaikkan paling banyak sekali per tick. Ini berlaku untuk semua peristiwa waktu: paling banyak satu peristiwa dari setiap jenis dinaikkan untuk objek tertentu Clock .

Clock Ketika pengalihan menyatakan dan kembali ke status aslinya di antara tanda centang (seperti mengubah dari Active ke Stopped dan kembali ke Active), peristiwa terkait masih terjadi.

Untuk informasi selengkapnya tentang peristiwa pengaturan waktu, lihat Gambaran Umum Peristiwa Pengaturan Waktu.

Nilai Saat Ini dan Nilai Dasar Properti

Properti yang dapat dianimasikan dapat memiliki dua nilai: nilai dasar dan nilai saat ini. Saat Anda mengatur properti menggunakan aksesor CLR atau SetValue metode , Anda menetapkan nilai dasarnya. Ketika properti tidak dianimasikan, nilai dasar dan saat ini sama.

Saat Anda menganimasikan properti, AnimationClock properti mengatur nilai properti saat ini . Mengambil nilai properti melalui aksesor CLR-nya atau GetValue metode mengembalikan output AnimationClock saat AnimationClock adalah Active atau Filling. Anda dapat mengambil nilai dasar properti dengan menggunakan GetAnimationBaseValue metode .

Baca juga