Direct 2D #11. Анимации
Johnny_Depp 10 минут назад Direct 2D #11. Анимации Простой 12 мин 197 Windows * C++ * Разработка игр * Туториал Всем здравствуйте! Появилось время, и сразу пишу вам. Сегодня поговорим об анимации.Важно понимать, что...
Anthropic — What company has the best second artificial intelligence model at the end of June?
Вот важная новость с фронта ИИ: Johnny_Depp 10 минут назад Direct 2D #11. Анимации Простой 12 мин 197 Windows * C++ * Разработка игр * Туториал Всем здравствуйте! Появилось время, и сразу пишу вам.
Сегодня поговорим об анимации. Важно понимать, что Direct2D - это низкоуровневое API, и готовых инструментов в нём нет. Однако существуют вспомогательные компоненты: Windows Animation Manager (WAM) и DirectComposition.
Технические детали
Первый появился в Windows 7, второй - в Windows 8. Windows Animation Manager создан для того, чтобы избавить разработчика от математических расчётов анимации: линейной интерполяции, кривых ускорения/замедления, эффекта пружины и т. Вы просто задаёте системе начальные и конечные координаты и эффект, а WAM самостоятельно вычисляет.
Ключевые понятия WAM:IUIAnimationManager - главный управляющий объект. Он создаёт анимации, отслеживает их выполнение и уведомляет о необходимости обновления кадра. IUIAnimationVariable - анимируемая переменная.
Это может быть координата X, прозрачность, масштаб или любое другое число с плавающей запятой. Вы просто устанавливаете текущее значение переменной, например: «эта переменная сейчас равна 100». IUIAnimationTransition - закон изменения переменной во времени.
Отраслевые последствия
WAM предоставляет богатую библиотеку встроенных переходов: линейный (CreateLinearTransition) , с ускорением и замедлением (CreateAccelerateDecelerateTransition), "пружина" (CreateSpringTransition) и многие другие(IUIAnimationTransitionLibrary и IUIAnimationTransitionLibrary2). IUIAnimationStoryboard - "раскадровка", контейнер, в который вы собираете один или несколько переходов и запускаете их одновременно или последовательно. В качестве краткого примера (к 11-й статье вы уже умеете работать с графикой, и нет нужды каждый раз писать полотно текста) приведём фрагмент:В классе окна или приложения объявим необходимые COM-указатели:// WAM CComPtr pAnimManager; CComPtr pTransitionLibrary; CComPtr pAnimVarX; CComPtr pStoryboard; // Direct2D (упрощённо) CComPtr pD2DFactory; CComPtr pRenderTarget; CComPtr pBrush;При старте приложения (например, в обработчике WM_CREATE) инициализируется COM и создаются необходимые объекты.
// Инициализация COM (если ещё не сделано) CoInitialize(NULL); // Создаём менеджер анимаций CoCreateInstance(CLSID_UIAnimationManager, NULL, CLSCTX_INPROC_SERVER, IID_IUIAnimationManager, (void**)&pAnimManager); // Создаём библиотеку переходов CoCreateInstance(CLSID_UIAnimationTransitionLibrary, NULL, CLSCTX_INPROC_SERVER, IID_IUIAnimationTransitionLibrary, (void**)&pTransitionLibrary); // Создаём переменную для координаты X. Начальное значение = 0 pAnimManager->CreateAnimationVariable(0. 0, &pAnimVarX);Ниже приведены пояснения к аргументам используемых функций.
CoInitialize:Первый аргумент зарезервирован и должен принимать значение NULL. CoCreateInstance:Первый аргумент - идентификатор класса (CLSID). Второй аргумент - указатель на управляющий IUnknown при агрегации объектов; в нашем случае агрегация не используется, поэтому передаётся NULL.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





