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.
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.
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.
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
.NET Desktop feedback
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk