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

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

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






В данном разделе рассмотрим создание простейшей анимации без использования специальных классов для анимации, таких как 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; просмотров: 525. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

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

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

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

Конституционно-правовые нормы, их особенности и виды Характеристика отрасли права немыслима без уяснения особенностей составляющих ее норм...

Толкование Конституции Российской Федерации: виды, способы, юридическое значение Толкование права – это специальный вид юридической деятельности по раскрытию смыслового содержания правовых норм, необходимый в процессе как законотворчества, так и реализации права...

Мелоксикам (Мовалис) Групповая принадлежность · Нестероидное противовоспалительное средство, преимущественно селективный обратимый ингибитор циклооксигеназы (ЦОГ-2)...

Менадиона натрия бисульфит (Викасол) Групповая принадлежность •Синтетический аналог витамина K, жирорастворимый, коагулянт...

Разновидности сальников для насосов и правильный уход за ними   Сальники, используемые в насосном оборудовании, служат для герметизации пространства образованного кожухом и рабочим валом, выходящим через корпус наружу...

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