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

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

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





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




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


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

Значення творчості Г.Сковороди для розвитку української культури Важливий внесок в історію всієї духовної культури українського народу та її барокової літературно-філософської традиції зробив, зокрема, Григорій Савич Сковорода (1722—1794 pp...

Постинъекционные осложнения, оказать необходимую помощь пациенту I.ОСЛОЖНЕНИЕ: Инфильтрат (уплотнение). II.ПРИЗНАКИ ОСЛОЖНЕНИЯ: Уплотнение...

Приготовление дезинфицирующего рабочего раствора хлорамина Задача: рассчитать необходимое количество порошка хлорамина для приготовления 5-ти литров 3% раствора...

Психолого-педагогическая характеристика студенческой группы   Характеристика группы составляется по 407 группе очного отделения зооинженерного факультета, бакалавриата по направлению «Биология» РГАУ-МСХА имени К...

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

Устройство рабочих органов мясорубки Независимо от марки мясорубки и её технических характеристик, все они имеют принципиально одинаковые устройства...

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