Студопедия — Создание анимации с помощью таймера
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Создание анимации с помощью таймера






В данном разделе рассмотрим создание простейшей анимации без использования специальных классов для анимации, таких как Vector3DAnimation, Vector3DAnimationUsingKeyFrames и пр. Анимация будет создаваться с помощью таймера.

Для работы с таймером в WPF используется класс DispatcherTimer, который инициализируется в процедурном коде следующим образом.

 

MyTimer = new DispatcherTimer();

MyTimer.Tick += new EventHandler(MyTimer_Tick);

MyTimer.Interval = new TimeSpan(100000);

 

Свойство Interval определяет частоту срабатывания таймера. Через свойство Tick определяется метод (в нашем случае MyTimer_Tick), который будет запускаться по тику таймера. Метод, запускающийся по тику таймера, например, можно описать следующим образом.

 

private void MyTimer_Tick(object sender, EventArgs e)

{

}

 

Для запуска и остановки таймера необходимо использовать его методы Start() и Stop().

Для задания различных трехмерных преобразований к различным объектом не только описываются разные 3D модели, но и создаются различные объекты из класса Transform3D. Рассмотрим пример поворота двух граней вокруг осей y и z в разных направлениях. При описании 3D моделей в отличие от предыдущего примера добавим описание цвета обратной стороны грани. XAML описание для элемента Viewport3D будет следующее.

 

< Viewport3D ClipToBounds=" True" Width=" 300" Margin=" 102, 0, 102, 71" >

 

<! -- Определяем положение и направление камеры. -->

< Viewport3D.Camera>

< PerspectiveCamera Position=" 0, 0, 2" LookDirection=" 0, 0, -1" FieldOfView=" 45" />

< /Viewport3D.Camera>

 

<! -- Определяем дочернии объекты для Viewport3D -->

< Viewport3D.Children>

 

<! -- Устанавливаем направления и цвет источника освещения. -->

< ModelVisual3D>

< ModelVisual3D.Content>

< DirectionalLight Color=" #FFFFFF" Direction=" -1, -1, -1" />

< /ModelVisual3D.Content>

< /ModelVisual3D>

 

<! -- Определяем первую 3D модель -->

< ModelVisual3D x: Name=" MyModel" >

< ModelVisual3D.Content>

< GeometryModel3D>

 

<! -- Определяем 3D объект -->

< GeometryModel3D.Geometry>

< MeshGeometry3D

TriangleIndices=" 0, 1, 2"

Positions=" -0.1, -0.1, 0.1 0.1, -0.1, 0.1 0.1, 0.1, 0.1" >

< /MeshGeometry3D>

< /GeometryModel3D.Geometry>

 

<! -- Зададим материал (цвет) объекта -->

< GeometryModel3D.Material>

< MaterialGroup>

< DiffuseMaterial Brush=" Blue" />

< /MaterialGroup>

< /GeometryModel3D.Material>

 

<! -- Зададим цвет обратной стороны -->

< GeometryModel3D.BackMaterial>

< MaterialGroup>

< DiffuseMaterial Brush=" Green" />

< /MaterialGroup>

< /GeometryModel3D.BackMaterial>

 

<! -- Перенесем объект влево -->

< GeometryModel3D.Transform>

< TranslateTransform3D OffsetX=" -0.5" />

< /GeometryModel3D.Transform>

 

 

< /GeometryModel3D>

< /ModelVisual3D.Content>

< /ModelVisual3D>

 

<! -- Определяем вторую 3D модель -->

< ModelVisual3D x: Name=" MyModel2" >

< ModelVisual3D.Content>

< GeometryModel3D>

 

<! -- Определяем 3D объект -->

< GeometryModel3D.Geometry>

< MeshGeometry3D

TriangleIndices=" 0, 1, 2"

Positions=" -0.1, -0.1, 0.1 0.1, -0.1, 0.1 0.1, 0.1, 0.1" >

< /MeshGeometry3D>

< /GeometryModel3D.Geometry>

 

<! -- Зададим материал (цвет) объекта -->

< GeometryModel3D.Material>

< MaterialGroup>

< DiffuseMaterial Brush=" Red" />

< /MaterialGroup>

< /GeometryModel3D.Material>

 

<! -- Зададим цвет обратной стороны -->

< GeometryModel3D.BackMaterial>

< MaterialGroup>

< DiffuseMaterial Brush=" Yellow" />

< /MaterialGroup>

< /GeometryModel3D.BackMaterial>

 

 

<! -- Перенесем объект вправо -->

< GeometryModel3D.Transform>

< TranslateTransform3D OffsetX=" 0.5" />

< /GeometryModel3D.Transform>

 

< /GeometryModel3D>

< /ModelVisual3D.Content>

< /ModelVisual3D>

 

< /Viewport3D.Children>

 

< /Viewport3D>

 

Обработчик события Loaded будет выглядеть следующим образом.

 

private void Window_Loaded(object sender, RoutedEventArgs e)

{

//Создаем преобразования для 1 объекта

myYRotate = new RotateTransform3D();

myYAxis = new AxisAngleRotation3D();

myYAxis.Axis = new Vector3D(0, 1, 0);

myYAxis.Angle = 0;

myYRotate.Rotation = myYAxis;

 

myZRotate = new RotateTransform3D();

myZAxis = new AxisAngleRotation3D();

myZAxis.Axis = new Vector3D(0, 0, 1);

myZAxis.Angle = 0;

myZRotate.Rotation = myZAxis;

 

myTransform1 = new Transform3DGroup();

MyModel.Transform = myTransform1;

 

myTransform1.Children.Add(myYRotate);

myTransform1.Children.Add(myZRotate);

 

//Создаем преобразования для 2 объекта

myYRotate2 = new RotateTransform3D();

myYAxis2 = new AxisAngleRotation3D();

myYAxis2.Axis = new Vector3D(0, 1, 0);

myYAxis2.Angle = 0;

myYRotate2.Rotation = myYAxis2;

 

myZRotate2 = new RotateTransform3D();

myZAxis2 = new AxisAngleRotation3D();

myZAxis2.Axis = new Vector3D(0, 0, 1);

myZAxis2.Angle = 0;

myZRotate2.Rotation = myZAxis2;

 

myTransform2 = new Transform3DGroup();

MyModel2.Transform = myTransform2;

 

myTransform2.Children.Add(myYRotate2);

myTransform2.Children.Add(myZRotate2);

 

// Подготоваливаем таймер к работа

MyTimer = new DispatcherTimer();

MyTimer.Tick += new EventHandler(MyTimer_Tick);

MyTimer.Interval = new TimeSpan(100000); }

 

Тик таймера выглядит следующим образом.

 

private void MyTimer_Tick(object sender, EventArgs e)

{

myYAxis.Angle += 1;

myZAxis.Angle += 1;

 

myYAxis2.Angle -= 2;

myZAxis2.Angle -= 2;

}

 

Остается добавить две кнопки для запуска и остановки таймера и их обработчики.

 

private void button1_Click(object sender, RoutedEventArgs e)

{

MyTimer.Start();

}

 

private void button2_Click(object sender, RoutedEventArgs e)

{

MyTimer.Stop();

}

 







Дата добавления: 2014-11-10; просмотров: 521. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

САНИТАРНО-МИКРОБИОЛОГИЧЕСКОЕ ИССЛЕДОВАНИЕ ВОДЫ, ВОЗДУХА И ПОЧВЫ Цель занятия.Ознакомить студентов с основными методами и показателями...

Меры безопасности при обращении с оружием и боеприпасами 64. Получение (сдача) оружия и боеприпасов для проведения стрельб осуществляется в установленном порядке[1]. 65. Безопасность при проведении стрельб обеспечивается...

Весы настольные циферблатные Весы настольные циферблатные РН-10Ц13 (рис.3.1) выпускаются с наибольшими пределами взвешивания 2...

Методы прогнозирования национальной экономики, их особенности, классификация В настоящее время по оценке специалистов насчитывается свыше 150 различных методов прогнозирования, но на практике, в качестве основных используется около 20 методов...

Методы анализа финансово-хозяйственной деятельности предприятия   Содержанием анализа финансово-хозяйственной деятельности предприятия является глубокое и всестороннее изучение экономической информации о функционировании анализируемого субъекта хозяйствования с целью принятия оптимальных управленческих...

Образование соседних чисел Фрагмент: Программная задача: показать образование числа 4 и числа 3 друг из друга...

Studopedia.info - Студопедия - 2014-2024 год . (0.012 сек.) русская версия | украинская версия