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

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

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






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



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

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

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

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

Классификация ИС по признаку структурированности задач Так как основное назначение ИС – автоматизировать информационные процессы для решения определенных задач, то одна из основных классификаций – это классификация ИС по степени структурированности задач...

Внешняя политика России 1894- 1917 гг. Внешнюю политику Николая II и первый период его царствования определяли, по меньшей мере три важных фактора...

Оценка качества Анализ документации. Имеющийся рецепт, паспорт письменного контроля и номер лекарственной формы соответствуют друг другу. Ингредиенты совместимы, расчеты сделаны верно, паспорт письменного контроля выписан верно. Правильность упаковки и оформления....

Законы Генри, Дальтона, Сеченова. Применение этих законов при лечении кессонной болезни, лечении в барокамере и исследовании электролитного состава крови Закон Генри: Количество газа, растворенного при данной температуре в определенном объеме жидкости, при равновесии прямо пропорциональны давлению газа...

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

Шов первичный, первично отсроченный, вторичный (показания) В зависимости от времени и условий наложения выделяют швы: 1) первичные...

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