Подтвердить что ты не робот

Лучшие практики анимации Wpf

Я ищу лучшие рекомендации или рекомендации относительно анимации в WPF. Особенно информация о соображениях производительности.

4b9b3361

Ответ 1

После того, как я получил немного больше опыта в этой области, так как я задал вопрос, я сам отвечу на это. Мой опыт исходит из работы над приложением отображения разума WPF. NovaMind - В последнее время мы сделали много анимаций для наших Функция презентатора в NovaMind Platinum: -)

В разделе MSDN по оптимизации производительности приложений WPF есть полезная информация об общих соображениях при написании приложений WPF:

http://msdn.microsoft.com/en-us/library/aa970683.aspx

Вот некоторые биты, которые я нашел особенно полезными и связаны с анимацией:

  • Событие CompositionTarget.Rendering вызывает постоянную анимацию WPF. Если вы используете это событие, отключайте его при каждой возможности.

  • Когда вы используете Brush для установки Fill или Stroke элемента, лучше установить значение Brush.Opacity, а не значение свойства свойства Opacity. Изменение свойства свойства Opacity может привести к тому, что WPF создаст временную поверхность.

  • Возможно, вы сможете обновить Transform, а не заменять его как значение свойства RenderTransform. Это особенно верно в сценариях, которые включают анимацию. Обновляя существующее преобразование, вы избегаете инициирования ненужного расчета макета.

Вот что я узнал из-за проб и ошибок:

  • Скажем, у вас есть пара элементов с эффектом, например, BlurEffect. Это быстрее , чтобы применить эффект к контейнеру этих элементов, а не к самим элементам. Несмотря на то, что эффект аппаратного ускорения, WPF, похоже, не подходит для обработки нескольких мелких предметов с эффектами. - Если вам не нужен одинаковый радиус размытия и не может группировать их в контейнере с примененным эффектом, на самом деле быстрее отображать элемент в растровое изображение (в программном обеспечении), а затем анимировать растровое изображение вокруг (если это возможно), Эффект (или непрозрачность) на объектах быстро убивает производительность при анимации.
  • Установка непрозрачности на кисти, а не элемента (как упоминалось выше) делает огромную разницу в производительности при анимации объектов.
  • Уменьшите количество изображений. Анимация большого количества частиц затруднительна, даже с приведенными выше советами. В этом случае вам может потребоваться вернуться вместо WriteableBitmap.

Я также слышал, что быстрее создавать много маленьких объектов, переопределяя OnRender в контейнере, а затем визуализируя их с помощью drawContext, а не напрямую добавляя их в визуальное дерево. На практике это не имело никакого значения в моем сценарии (при рендеринге около 300 эллиптических геометрий), но это может быть полезно в некоторых сценариях. Теория звучит солидно.

Наконец, я обнаружил, что классы анимации, встроенные в WPF, слишком громоздки и имели гораздо больше удовольствия и успеха, используя недостаток библиотек анимации: Artefact Animator. Серьезно, попробуйте. (он также доступен для Silverlight). Это то, что должно было бы оживить (в коде).

Все не радуги и единороги. Я по-прежнему считаю невозможным создание действительно флюидных анимаций при работе с полным экраном в более высоких разрешениях. Подробнее об этом в моем вопросе Как узнать, почему анимация заикается? - Я был бы признателен за любой ввод.

приветствия, удачи, и если у вас есть что-то классное, чтобы показать, дайте мне знать:)