Windows
<<  Общие сведения о платформе Windows Phone 7.5 Фон для подсвечниках  >>
Создание приложений XNA для Windows Phone
Создание приложений XNA для Windows Phone
Основные сведения о технологии XNA
Основные сведения о технологии XNA
Темы раздела
Темы раздела
XNA
XNA
XNA и silverlight
XNA и silverlight
Проект игры
Проект игры
Действия при запуске игры
Действия при запуске игры
Методы класса XNA Game
Методы класса XNA Game
Методы класса XNA Game
Методы класса XNA Game
Загрузка игрового контента
Загрузка игрового контента
Загрузка игрового контента
Загрузка игрового контента
Хранение текстуры
Хранение текстуры
Загрузка текстуры в программу
Загрузка текстуры в программу
Координаты и пиксели
Координаты и пиксели
Оси координат в XNA
Оси координат в XNA
Структура Rectangle
Структура Rectangle
Метод Draw
Метод Draw
Группы спрайтов
Группы спрайтов
Методы SpriteBatch Begin и End
Методы SpriteBatch Begin и End
Метод SpriteBatch
Метод SpriteBatch
Настройка положения
Настройка положения
Масштабирование изображения
Масштабирование изображения
Масштабируемая область
Масштабируемая область
Метод Update
Метод Update
Пример метода Update
Пример метода Update
Краткие итоги
Краткие итоги
Создание игрового мира
Создание игрового мира
Темы раздела
Темы раздела
Управление движением объекта
Управление движением объекта
Перемещение объекта
Перемещение объекта
Выход за пределы экрана
Выход за пределы экрана
Отскок от границ экрана
Отскок от границ экрана
Игровые переменные
Игровые переменные
Загрузка игровых текстур
Загрузка игровых текстур
Настройка платформ
Настройка платформ
Управление платформой
Управление платформой
Класс TouchPanel
Класс TouchPanel
Информация о сенсорном вводе
Информация о сенсорном вводе
Информация о сенсорном вводе
Информация о сенсорном вводе
Информация о сенсорном вводе
Информация о сенсорном вводе
Информация о сенсорном вводе
Информация о сенсорном вводе
Информация о сенсорном вводе
Информация о сенсорном вводе
Информация о сенсорном вводе
Информация о сенсорном вводе
Обнаружение столкновений
Обнаружение столкновений
Добавление шрифта
Добавление шрифта
Загрузка шрифта
Загрузка шрифта
Отрисовка текста
Отрисовка текста
Краткие итоги
Краткие итоги
Использование средств Windows Phone в играх
Использование средств Windows Phone в играх
Темы раздела
Темы раздела
Акселерометр
Акселерометр
Акселерометр в XNA 4.0
Акселерометр в XNA 4.0
Добавление библиотеки
Добавление библиотеки
Класс Accelerometer
Класс Accelerometer
Событие класса Accelerometer
Событие класса Accelerometer
Акселерометр и ориентация
Акселерометр и ориентация
Эмуляция акселерометра
Эмуляция акселерометра
Многопоточность
Многопоточность
Возможные проблемы
Возможные проблемы
Добавление блокировки
Добавление блокировки
Использование блокировки
Использование блокировки
Использование блокировки
Использование блокировки
Использование звуков в XNA
Использование звуков в XNA
Загрузка звуков
Загрузка звуков
Воспроизведение звука
Воспроизведение звука
Класс SoundEffectInstance
Класс SoundEffectInstance
Воспроизведение звука
Воспроизведение звука
Управление звуком
Управление звуком
Состояние воспроизведения
Состояние воспроизведения
Воспроизведение звуковых эффектов в Silverlight
Воспроизведение звуковых эффектов в Silverlight
Добавление XNA в приложение Silverlight
Добавление XNA в приложение Silverlight
Загрузка звуков
Загрузка звуков
Воспроизведение звука
Воспроизведение звука
Обновление XNA
Обновление XNA
Выбор разрешения экрана
Выбор разрешения экрана
Полноэкранный режим
Полноэкранный режим
Отмена блокировки экрана
Отмена блокировки экрана
Краткие итоги
Краткие итоги
Совместное использование XNA и Silverlight
Совместное использование XNA и Silverlight
Темы раздела
Темы раздела
XNA и silverlight
XNA и silverlight
Комбинированное решение
Комбинированное решение
Страница игры XNA
Страница игры XNA
Переход на страницу игры
Переход на страницу игры
Страница игры
Страница игры
Элементы Silverlight в XNA
Элементы Silverlight в XNA
Добавление элементов Silverlight
Добавление элементов Silverlight
Рендеринг элементов Silverlight
Рендеринг элементов Silverlight
Создание объекта для рендеринга
Создание объекта для рендеринга
Рендеринг элементов Silverlight
Рендеринг элементов Silverlight
Краткие итоги
Краткие итоги

Презентация на тему: «Создание приложений XNA для Windows Phone». Автор: Rob Miles. Файл: «Создание приложений XNA для Windows Phone.pptx». Размер zip-архива: 3411 КБ.

Создание приложений XNA для Windows Phone

содержание презентации «Создание приложений XNA для Windows Phone.pptx»
СлайдТекст
1 Создание приложений XNA для Windows Phone

Создание приложений XNA для Windows Phone

Лекция 7

2 Основные сведения о технологии XNA

Основные сведения о технологии XNA

Раздел 7.1

2

3 Темы раздела

Темы раздела

Введение в XNA Класс XNA Game Добавление и управление игровыми ресурсами Создание и отрисовка спрайтов

3

4 XNA

XNA

XNA позволяет создавать 2D и 3D игры, используя аппаратное ускорение графики XNA содержит набор инструментов для проектирования игр и управления игровым контентом В Windows Phone используется XNA версии 4 XNA является частью Windows Phone SDK

4

5 XNA и silverlight

XNA и silverlight

XNA существенно отличается от Silverlight в части создания и работы программ Технология XNA оптимизирована для создания игр не используются элементы пользовательского интерфейса и привязка данных классы XNA работают с игровой информацией и игровыми ресурсами XNA поддерживает рендеринг 3D моделей и управление игровым контентом

5

6 Проект игры

Проект игры

Решение для игры содержит два проекта один — для программного кода игры другой — для хранения игровых ресурсов Проект для хранения ресурсов использует контент-менеджер, который предназначен для удобного управления ресурсами В обозревателе решений можно добавлять и другие необходимые файлы

6

7 Действия при запуске игры

Действия при запуске игры

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

7

8 Методы класса XNA Game

Методы класса XNA Game

partial class PongGame : Microsoft.Xna.Framework.Game { protected override void LoadContent (bool loadAllContent) { } protected override void Update(GameTime gameTime) { } protected override void Draw(GameTime gameTime) { } }

8

9 Методы класса XNA Game

Методы класса XNA Game

Программы не должны вызывать методы LoadContent, Draw и Update Эти методы вызывает среда XNA Метод LoadContent вызывается при запуске игры Метод Draw вызывается так часто, насколько возможно Метод Update вызывается с частотой 30 раз в секунду

9

10 Загрузка игрового контента

Загрузка игрового контента

Метод LoadContent вызывается при запуске игры Здесь должен размещаться код для загрузки игрового контента изображения, звуки, модели и др.

Protected override void loadcontent() { // создание группы спрайтов, которая можно использовать // для отрисовки текстур spritebatch = new spritebatch(graphicsdevice); }

10

11 Загрузка игрового контента

Загрузка игрового контента

При добавлении ресурса в проект для него задаётся имя Метод Load, который предоставляет контент-менеджер, использует имя ресурса для получения доступа к нему

ballTexture = Content.Load<Texture2D>("WhiteDot");

11

12 Хранение текстуры

Хранение текстуры

Класс XNA Texture2D используется для хранения двумерных текстур Как и любое значение текстура хранится в переменной, которую можно использовать во всех методах проекта

// Игровой мир texture2d balltexture;

12

13 Загрузка текстуры в программу

Загрузка текстуры в программу

В методе LoadContent выполняется загрузка текстур и других ресурсов в память приложения Контент-менеджер управляет всеми операциями при загрузке ресурсов

Protected override void loadcontent() { // создание группы спрайтов, которая можно использовать // для отрисовки текстур spritebatch = new spritebatch(graphicsdevice); balltexture = content.Load<texture2d>("whitedot"); }

13

14 Координаты и пиксели

Координаты и пиксели

При отрисовке изображения в XNA используется система координат, значения которых выражаются в пикселях Стандартный размер экрана в Windows Phone составляет 800?480 пикселей Если попытаться вывести изображение за пределами этой области, то XNA не выдаст ошибку, но и не выведет изображение

14

15 Оси координат в XNA

Оси координат в XNA

Начало отсчёта в системе координат в XNA находится в левом верхнем углу экрана, если он находится в альбомной ориентации Ось X направлена вправо, а ось Y — вниз при увеличении координаты X объекта он перемещается вправо при увеличении координаты Y объекта он перемещается вниз (а не вверх)

15

16 Структура Rectangle

Структура Rectangle

Для того чтобы вывести текстуру на экран, нужно указать положение и размер прямоугольной области, которая ограничивает текстуру Структура Rectangle хранит информацию о положении и размере прямоугольника

Rectangle ballRectangle = new Rectangle( 0, 0, ballTexture.Width, ballTexture.Height), Color.White);

16

17 Метод Draw

Метод Draw

Метод Draw периодически вызывается во время работы игры Этот метод должен содержать программный код для отрисовки изображения на экране

protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); }

17

18 Группы спрайтов

Группы спрайтов

Средства XNA для двумерной графики содержат набор методов для отрисовки спрайтов, которые используют графический процессор При отрисовке вся информация об объектах, включая текстуры и трансформации, представляются в виде единого графического объекта Для создания такого объекта используется класс SpriteBatch

18

19 Методы SpriteBatch Begin и End

Методы SpriteBatch Begin и End

При вызове метода Begin начинается формирование группы операций отрисовки объекта При вызове метода End объект подготавливается к рендерингу

Protected override void draw(gametime gametime) { graphicsdevice.Clear(color.Cornflowerblue); spritebatch.Begin(); // сюда нужно добавить код для отрисовки объектов spritebatch.End(); base.Draw(gametime); }

19

20 Метод SpriteBatch

Метод SpriteBatch

Draw

Метод Draw класса SpriteBatch выполняет отрисовку спрайта Методу передаются параметры: текстура её положение (в виде прямоугольника) цвет оттенка

spriteBatch.Draw(ballTexture, ballRectangle, Color.White);

20

21 Настройка положения

Настройка положения

new Rectangle( 0, 0, ballTexture.Width, ballTexture.Height)

New rectangle( 0, 0, // положение 200,100) // размер

New rectangle( 50, 50, // положение 60, 60) // размер

21

22 Масштабирование изображения

Масштабирование изображения

Во время работы игра использует всю доступную область экрана Можно определить размер экрана и другие параметры графического устройства: GraphicsDevice.Viewport.Width GraphicsDevice.Viewport.Height Эту информацию можно использовать для масштабирования изображения на экране

22

23 Масштабируемая область

Масштабируемая область

Этот код создаёт квадратную область, размер которой равен 1/20 ширины экрана При изменении размера экрана использующий эту область объект будет выглядеть одинаково

ballRectangle = new Rectangle( 0, 0, GraphicsDevice.Viewport.Width / 20, GraphicsDevice.Viewport.Width / 20);

23

24 Метод Update

Метод Update

Метод Update автоматически вызывается с частотой 30 раз в секунду во время работы игры Этот метод предназначен для управления игровым миром

Protected override void update(gametime gametime) { // сюда нужно добавить код для обновления изображения base.Update(gametime); }

24

25 Пример метода Update

Пример метода Update

При каждом вызове этого метода увеличиваются значения координат X и Y объекта Это приводит к его перемещению по экрану

protected override void Update(GameTime gameTime) { ballRectangle.X++; ballRectangle.Y++; base.Update(gameTime); }

25

26 Краткие итоги

Краткие итоги

XNA используется для создания игр Создавать игры можно в Visual Studio Игра содержит методы для инициализации, обновления и отрисовки изображения Игровые объекты хранятся в виде набора текстур и прямоугольников, в которые эти текстуры вписаны

26

27 Создание игрового мира

Создание игрового мира

Раздел 7.2

27

28 Темы раздела

Темы раздела

Управление перемещением спрайта Создание нескольких спрайтов Управление объектами с помощью сенсорного экрана Обнаружение столкновений Вывод текста на экран

28

29 Управление движением объекта

Управление движением объекта

Класс Rectangle содержит целочисленные свойства для указания положения прямоугольника Для более точного контроля над движением объекта можно использовать вещественные переменные

float ballX = 0; float ballY = 0; ballRectangle.X = (int)(ballX + 0.5f); ballRectangle.Y = (int)(ballY + 0.5f);

29

30 Перемещение объекта

Перемещение объекта

В методе Update изменяются значения переменных, которые хранят координаты объекта При следующем вызове метода Draw объект будет отрисован в другом месте экрана Переменные ballXSpeed и ballYSpeed содержат значения скорости перемещения объекта по соответствующей координате

ballX = ballX + ballXSpeed; ballY = ballY + ballYSpeed;

30

31 Выход за пределы экрана

Выход за пределы экрана

31

32 Отскок от границ экрана

Отскок от границ экрана

Когда объект достигает границы экрана, он должен изменить направление движения Для этого достаточно изменить знак скорости по соответствующей координате на противоположный

if (ballX < 0 || ballX + ballRectangle.Width > GraphicsDevice.Viewport.Width) { ballXSpeed = -ballXSpeed; }

32

33 Игровые переменные

Игровые переменные

// Шар texture2d balltexture; rectangle ballrectangle; float ballx; float bally; float ballxspeed = 3; float ballyspeed = 3; // левая платформа texture2d lpaddletexture; rectangle lpaddlerectangle; float lpaddlespeed = 4; float lpaddley; // правая платформа создаётся аналогично // расстояние от платформы до границы экрана int margin;

33

34 Загрузка игровых текстур

Загрузка игровых текстур

При запуске игры метод LoadContent загружает игровые текстуры и ресурсы

protected override void LoadContent() { ballTexture = Content.Load<Texture2D>("ball"); lPaddleTexture = Content.Load<Texture2D>("lpaddle"); rPaddleTexture = Content.Load<Texture2D>("rpaddle"); }

34

35 Настройка платформ

Настройка платформ

Этот код настраивает положение и размеры панелей

margin = GraphicsDevice.Viewport.Width / 20; lPaddleRectangle = new Rectangle( margin, 0, GraphicsDevice.Viewport.Width / 20, GraphicsDevice.Viewport.Height / 5); rPaddleRectangle = new Rectangle( GraphicsDevice.Viewport.Width – lPaddleRectangle.Width - margin, 0, GraphicsDevice.Viewport.Width / 20, GraphicsDevice.Viewport.Height / 5);

35

36 Управление платформой

Управление платформой

Для управления платформой можно использовать сенсорный экран Сенсорный экран Windows Phone может отслеживать до четырёх одновременных касаний, а также определить начало и окончание касания В нашем примере платформа должна перемещаться вверх и вниз

36

37 Класс TouchPanel

Класс TouchPanel

Класс TouchPanel содержит метод GetState, который возвращает информацию о сенсорном вводе Объекты TouchLocation описывают текущий статус сенсорного экрана Возвращаемая коллекция может содержать до четырёх элементов

TouchCollection touches = TouchPanel.GetState();

37

38 Информация о сенсорном вводе

Информация о сенсорном вводе

Сенсорный ввод используется для перемещения платформы вверх и вниз

if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } }

38

39 Информация о сенсорном вводе

Информация о сенсорном вводе

Этот код проверяет, было ли касание

if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } }

39

40 Информация о сенсорном вводе

Информация о сенсорном вводе

Получение информации о касании

if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } }

40

41 Информация о сенсорном вводе

Информация о сенсорном вводе

Определение, было ли касание в нижней половине экрана

if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } }

41

42 Информация о сенсорном вводе

Информация о сенсорном вводе

Перемещение платформы вниз, если пользователь коснулся нижней половины экрана

if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } }

42

43 Информация о сенсорном вводе

Информация о сенсорном вводе

Перемещение платформы вверх, если пользователь коснулся верхней половины экрана

if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } }

43

44 Обнаружение столкновений

Обнаружение столкновений

Необходимо, чтобы при столкновении с платформой шар отскакивал от неё Для этого необходимо проверить, пересекаются ли два прямоугольника, в которых вписаны текстуры объектов Для этого можно использовать метод Intersects класса Rectangle

if (ballRectangle.Intersects(lPaddleRectangle)) { ballXSpeed = -ballXSpeed; }

44

45 Добавление шрифта

Добавление шрифта

Для вывода текста на экран используется объект SpriteFont Он позволяет задавать необходимые свойства шрифта Свойства шрифта находятся в XML-файле, который можно редактировать

45

46 Загрузка шрифта

Загрузка шрифта

Контент-менеджер управляет шрифтами так же, как и другими игровыми ресурсами Шрифт загружается в переменную, которую можно использовать в методах

Spritefont font; protected override void loadcontent() { // остальная часть метода loadcontent font = content.Load<spritefont>("messagefont"); }

46

47 Отрисовка текста

Отрисовка текста

Метод DrawString отрисовывает строку текста на экране, используя загруженный шрифт

Protected override void draw(gametime gametime) { graphicsdevice.Clear(color.Cornflowerblue); spritebatch.Begin(); spritebatch.Drawstring( font, "hello world", new vector2(100, 100), color.White); // остальная часть метода draw }

47

48 Краткие итоги

Краткие итоги

Игровые объекты можно перемещать по экрану, изменяя их положение Для более точного управления объектами можно использовать вещественные переменные Класс TouchPanel предоставляет информацию о касаниях экрана, которая хранится в объектах TouchLocation Игры XNA могут выводить на экран текст с помощью объектов SpriteFont

48

49 Использование средств Windows Phone в играх

Использование средств Windows Phone в играх

Раздел 7.3

49

50 Темы раздела

Темы раздела

Использование акселерометра для управления в играх Воспроизведение звуков в играх XNA и приложениях Silverlight Ориентация экрана в приложениях для Windows Phone

50

51 Акселерометр

Акселерометр

Акселерометр может измерять ускорение по осям X, Y и Z Значения ускорения по осям X и Y можно использовать для управления спрайтами в 2D играх Значения, возвращаемые акселерометром, находятся а пределах от -1 до +1 Акселерометр можно использовать как в играх XNA, так и в приложениях Silverlight

51

52 Акселерометр в XNA 4.0

Акселерометр в XNA 4.0

Акселерометр XNA 4.0 генерирует событие, когда он фиксирует изменение значений Для получения значений акселерометра нужно создать обработчик события Метод-обработчик может сохранять значения, чтобы их можно было использовать позже

52

53 Добавление библиотеки

Добавление библиотеки

Для работы с акселерометром нужно добавить в проект ссылку на библиотеку Microsoft.Devices.Sensors Также рекомендуется добавить в файл кода директиву using

using Microsoft.Devices.Sensors;

53

54 Класс Accelerometer

Класс Accelerometer

Этот код выполняется в методе Initialise для настройки акселерометра Метод Initialise вызывает XNA при запуске игры В коде создаётся обработчик события акселерометра, и акселерометр запускается

Accelerometer acc = new Accelerometer(); acc.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs> (acc_ReadingChanged); acc.Start();

54

55 Событие класса Accelerometer

Событие класса Accelerometer

Этот метод запускается, когда происходит событие акселерометра Полученные от акселерометра значения записываются в переменную класса Vector3

Vector3 accelState = Vector3.Zero; void acc_ReadingChanged (object sender, AccelerometerReadingEventArgs e) { accelState.X = (float)e.X; accelState.Y = (float)e.Y; accelState.Z = (float)e.Z; }

55

56 Акселерометр и ориентация

Акселерометр и ориентация

Акселерометр выдаёт значения независимо от ориентации телефона Координатные оси акселерометра не изменяются при изменении ориентации телефона Этот факт следует учитывать при разработке игр, управление в которых реализуется с помощью акселерометра

56

57 Эмуляция акселерометра

Эмуляция акселерометра

Эмулятор Windows Phone включает эмулятор акселерометра Он вызывается при нажатии на кнопку Дополнительные функции в окне эмулятора

57

58 Многопоточность

Многопоточность

При использовании акселерометра в программе одновременно выполняются две операции: акселерометр генерирует и сохраняет новые значения программа использует эти значения для управления игровым объектом Требуется обеспечить синхронизацию работы этих потоков

58

59 Возможные проблемы

Возможные проблемы

Метод Update запускается и считывает значение по оси X Происходит событие класса Accelerometer, которое генерирует новые значения по осям X, Y and Z Метод Update считывает новые значения по осям Y и Z Результат: будут использоваться старые и новые значения разных осей

59

60 Добавление блокировки

Добавление блокировки

Проблема решается с помощью директивы lock Процесс может заблокировать объект до тех пор, пока не выполнится полностью указанный блок кода После этого заблокированный объект освобождается Если другой процесс хочет заблокировать занятый объект, он ждёт его освобождения

60

61 Использование блокировки

Использование блокировки

Объект accelLock блокируется до окончания выполнения кода в блоке

object accelLock = new object(); void acc_ReadingChanged (object sender, AccelerometerReadingEventArgs e) { lock (accelLock) { accelState.X = (float)e.X; accelState.Y = (float)e.Y; accelState.Z = (float)e.Z; } }

61

62 Использование блокировки

Использование блокировки

Этот код метода Update также блокирует объект accelLock, если он не был заблокирован другим методом При этом, выполнение кода внутри блока не будет прерван другим методом

lock (accelLock) { lPaddleY = lPaddleY - (accelState.X * lPaddleSpeed); }

62

63 Использование звуков в XNA

Использование звуков в XNA

Звуки являются частью контента и делятся на два типа Звуковые эффекты WAV-файлы хранятся в памяти, чтобы их можно было быстро воспроизвести Фоновая музыка WMA- и MP3-файлы воспроизводятся мультимедиа проигрывателем

63

64 Загрузка звуков

Загрузка звуков

Метод LoadContent вызывается при запуске игры Звуки загружаются так же, как и другие ресурсы

// Звуковые эффекты soundeffect dingsound; soundeffect explodesound; protected override void loadcontent() { dingsound = content.Load<soundeffect>("ding"); explodesound = content.Load<soundeffect>("explode"); }

64

65 Воспроизведение звука

Воспроизведение звука

Экземпляр класса SoundEffect содержит метод Play для воспроизведения звука Звук воспроизводится сразу же при вызове этого метода

if (ballY < 0 || ballY + ballRectangle.Height > GraphicsDevice.Viewport.Height) { ballYSpeed = -ballYSpeed; dingSound.Play(); }

65

66 Класс SoundEffectInstance

Класс SoundEffectInstance

Класс SoundEffectInstance используется для управления воспроизведением звука Звук воспроизводится сразу же при вызове этого метода Экземпляр класса SoundEffectInstance создаётся на основе объекта SoundEffect методом CreateInstance

engineInstance = engineSound.CreateInstance();

66

67 Воспроизведение звука

Воспроизведение звука

Метод Play класса SoundEffectInstance воспроизводит звук Методы Pause и Stop прерывают воспроизведения звука

engineInstance.Play(); ... engineInstance.Pause(); ... engineInstance.Stop();

67

68 Управление звуком

Управление звуком

Свойства класса SoundEffectInstance позволяют настраивать звуковые эффекты громкость в интервале от 0 до 1 тон в интервале от – 1 до +1 панорамирование в интервале от – 1 (слева) до +1 (справа)

engineInstance.Volume = accelVector.Length() / volFactor; engineInstance.Pitch = accelVector.Length() / soundFactor; engineInstance.Pan = 0;

68

69 Состояние воспроизведения

Состояние воспроизведения

Свойство State хранит значение статуса воспроизведения Этот код воспроизводит звук, если его воспроизведение остановлено Свойство IsLooped можно использовать для задания циклического воспроизведения звука

if (engineInstance.State == SoundState.Stopped) { engineInstance.Play(); }

69

70 Воспроизведение звуковых эффектов в Silverlight

Воспроизведение звуковых эффектов в Silverlight

Для воспроизведения звуковых эффектов в приложениях Silverlight нужно использовать класс XNA SoundEffect Для этого нужно выполнить действия: добавить XNA в приложение Silverlight загрузить звук из ресурсов воспроизвести звук с помощью XNA обновлять систему XNA

70

71 Добавление XNA в приложение Silverlight

Добавление XNA в приложение Silverlight

Для использования XNA в проект приложения Silverlight нужно: добавить ссылку на библиотеку Microsoft.XNA.Framework добавить ссылки на пространства имён Microsoft.XNA.Framework и Microsoft.XNA.Framework.Audio

71

72 Загрузка звуков

Загрузка звуков

Звук добавляется в проект так же, как и другие ресурсы Этот код выполняется при запуске приложения и загружает звук из WAV-файла с помощью файлового потока Здесь используется поток, поскольку в Silverlight нет контент-менеджера

Beep = SoundEffect.FromStream( TitleContainer.OpenStream("Sounds/beep.wav"));

72

73 Воспроизведение звука

Воспроизведение звука

Для воспроизведения звука в Silverlight используются те же средства, что и в XNA Для простого воспроизведения звука используется метод Play Если необходимо управлять воспроизведением звука, можно создать объект SoundEffectInstance и управлять его свойствами

beep.Play();

73

74 Обновление XNA

Обновление XNA

В этом коде запускается таймер, который будет генерировать события с частотой 30 раз в секунду Обработчик будет обновлять среду XNA для обеспечения её корректной работы

DispatcherTimer timer = new DispatcherTimer(); timer.Tick += new EventHandler(timer_Tick); timer.Interval = TimeSpan.FromTicks(333333); timer.Start(); void timer_Tick(object sender, EventArgs e) { FrameworkDispatcher.Update(); }

74

75 Выбор разрешения экрана

Выбор разрешения экрана

Приложения XNA могут указывать необходимые размеры экрана Графическая система Windows Phone будет масштабировать изображение под размер экрана рабочего устройства Уменьшение разрешения экрана может повысить быстродействие приложения Также приложение может поддерживать различные режимы ориентации экрана

75

76 Полноэкранный режим

Полноэкранный режим

Windows Phone использует верхнюю часть экрана для вывода информации Приложения XNA могут перекрывать эту область, если работают в полноэкранном режиме Для настройки экрана используются свойства объекта graphics

76

77 Отмена блокировки экрана

Отмена блокировки экрана

Если приложение использует акселерометр, но не использует сенсорный экран, то периодически может вызываться экранная заставка Для её отключения можно использовать свойство IsScreenSaverEnabled класса Guide

Guide.IsScreenSaverEnabled = false;

77

78 Краткие итоги

Краткие итоги

Для управления игровыми объектами можно использовать акселерометр Приложения XNA и Silverlight могут воспроизводить звуковые эффекты, используя встроенные библиотеки Приложения для Windows Phone могут использовать различные режимы ориентации экрана

78

79 Совместное использование XNA и Silverlight

Совместное использование XNA и Silverlight

Раздел 7.4

79

80 Темы раздела

Темы раздела

Создание комбинированных проектов Использование XNA в проекте Silverlight Переход на страницу игры XNA Игровой движок XNA в Silverlight Совместное использование элементов XNA и Silverlight на одной странице

80

81 XNA и silverlight

XNA и silverlight

Можно создавать проекты, в которых совместно используются XNA и Silverlight XNA выполняется внутри страницы Silverlight XNA удобнее использовать для создания игрового процесса, а Silverlight — для создания интерфейса приложения Также можно размещать элементы Silverlight на экране игры XNA

81

82 Комбинированное решение

Комбинированное решение

Комбинированное решение Silverlight и XNA содержит три проекта проект Silverlight библиотека XNA игровой контент Эти проекты автоматически создаёт Visual Studio Главным проектом является проект Silverlight

82

83 Страница игры XNA

Страница игры XNA

Игра XNA работает на одной из страниц Silverlight, которая является частью проекта При переходе на эту страницу игра запускается При этом, система Silverlight продолжает быть активной и обрабатывать события

83

84 Переход на страницу игры

Переход на страницу игры

Это код обработчика нажатия на кнопку, который находится в файле MainPage.xaml.cs При переходе на страницу игры она запустится

private void Button_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri("/GamePage.xaml", UriKind.Relative)); }

84

85 Страница игры

Страница игры

Эти методы управляют игровым процессом Метод OnNavigatedTo заменяет методы Initialise и LoadContent Метод OnNavigatedFrom приостанавливает игру Метод OnUpdate заменяет метод Update Метод OnDraw заменяет метод Draw

protected override void OnNavigatedTo(NavigationEventArgs e) protected override void OnNavigatedFrom(NavigationEventArgs e) private void OnUpdate(object sender, GameTimerEventArgs e) private void OnDraw(object sender, GameTimerEventArgs e)

85

86 Элементы Silverlight в XNA

Элементы Silverlight в XNA

Комбинированный проект не содержит XAML-код для страницы XNA Чтобы вывести элементы Silverlight на экран, необходимо самостоятельно создать дополнительный код для преобразования элементов Silverlight в набор текстур, которые использует XNA для вывода на экран

86

87 Добавление элементов Silverlight

Добавление элементов Silverlight

Этот код содержит два элемента текстовый блок для вывода счёта кнопка для завершения игры

<Grid x:Name="LayoutRoot"> <StackPanel> <TextBlock x:Name="ScoreTextBlock" Text="0:0" TextAlignment="Center" Style="{StaticResource PhoneTextTitle1Style}" /> <Button Content="Quit" Name="quitButton" Width="480" Click="quitButton_Click" /> </StackPanel> </Grid>

87

88 Рендеринг элементов Silverlight

Рендеринг элементов Silverlight

Класс UIElementRenderer выполняет рендеринг элементов страницы Silverlight в текстуры XNA Эти текстуры должны выводиться на экран в методе onDraw

UIElementRenderer elementRenderer;

88

89 Создание объекта для рендеринга

Создание объекта для рендеринга

Экземпляр класса UIElementRenderer создаётся при запуске игры Конструктор класса принимает в качестве параметров ширину и высоту области экрана для рендеринга

if (null == elementRenderer) { elementRenderer = new UIElementRenderer(this, (int)ActualWidth, (int)ActualHeight); }

89

90 Рендеринг элементов Silverlight

Рендеринг элементов Silverlight

Этот код выполняет рендеринг элементов Silverlight в текстуру XNA, которая будет отрисована в игре Этот код выполняется в методе onDraw

elementRenderer.Render(); ... spriteBatch.Draw(elementRenderer.Texture, Vector2.Zero, Color.White);

90

91 Краткие итоги

Краткие итоги

XNA и Silverlight можно совместно использовать в одном решении Игра XNA может запускаться на странице приложения Silverlight Страница XNA не содержит файла с кодом XAML, поскольку элементы Silverlight преобразуются в текстуру XNA Для вывода на экран элементов Silverlight используется класс UIElementRenderer

91

«Создание приложений XNA для Windows Phone»
http://900igr.net/prezentacija/informatika/sozdanie-prilozhenij-xna-dlja-windows-phone-72995.html
cсылка на страницу
Урок

Информатика

130 тем
Слайды
900igr.net > Презентации по информатике > Windows > Создание приложений XNA для Windows Phone