Разработка игр для Windows Phone 7интерактивное представление

Содержание

Слайд 2

Очень разные игры...

Очень разные игры...

Слайд 4

Очень разные игры...

Очень разные игры...

Слайд 5

Содержание

Мы напишем простую 2D-игру «Морской бой» менее, чем за 30 мин
Посмотрим другие

Содержание Мы напишем простую 2D-игру «Морской бой» менее, чем за 30 мин
примеры игр
Также вы узнаете
Что нового в XNA в Mango
XNA – не только для игр!
Концепция 3 экранов и разработка под 3 экрана
Управление телефоном: multitouch и жесты
Облачные игры: XBox Live

Слайд 6

Телефон как платформа для игр

Телефон как платформа для игр

Слайд 7

Концепция трёх экранов

Концепция трёх экранов

Слайд 8

Разработка под три экрана

XNA Framework

.NET Framework

.NET Compact Framework

.NET Compact Framework

XNA Game Studio

Разработка под три экрана XNA Framework .NET Framework .NET Compact Framework .NET

Слайд 9

Выбор платформы

XNA

Silverlight

HTML5

Выбор платформы XNA Silverlight HTML5

Слайд 10

Самая главная мысль на сегодня!

Программная модель XNA основана на игровом цикле, а

Самая главная мысль на сегодня! Программная модель XNA основана на игровом цикле, а не на событиях!
не на событиях!

Слайд 11

Игровой цикл

public void LoadContent(…)
{

}
public void Update(…)
{

Игровой цикл public void LoadContent(…) { … } public void Update(…) {

}
public void Draw(…)
{

}

LoadContent

Update

Draw

Слайд 12

Пишем игру 1. Игровой цикл

Пишем игру 1. Игровой цикл

Слайд 13

Разработка под три экрана

XNA Framework

.NET Framework

.NET Compact Framework

.NET Compact Framework

XNA Game Studio

Разработка под три экрана XNA Framework .NET Framework .NET Compact Framework .NET

Слайд 14

Архитектура XNA

Direct3D

XACT

XINPUT

XContent

Platform

Graphics

Audio

Input

Math

Storage

Core Framework

Application Model

Content Pipeline

Extended Framework

Starter Kits

Code

Content

Components

Games

Архитектура XNA Direct3D XACT XINPUT XContent Platform Graphics Audio Input Math Storage

Слайд 15

Пишем игру 2. Ориентация и масштабирование

Пишем игру 2. Ориентация и масштабирование

Слайд 16

Масштабирование / ориентация

Пишем игру без учёта нативного разрешения и ориентации экрана

Масштабирование для

Масштабирование / ориентация Пишем игру без учёта нативного разрешения и ориентации экрана
поднятия производительности

Масштибирование в обе стороны к нативному разрешению

Автоматический поворот между портретным и ландшафтным режимами
Touch API автоматически поддерживает изменение ориентации

Компромисс между производительностью и четкостью
800x480 = 384,000 пикселей, 480x320 = 153,600 пикселей

Много лучше, чем билинейная фильтрация
Простой перенос игр с других платформ
Масштабирование на аппаратном уровне

Слайд 17

Пишем игру 3. Обработка ввода

Пишем игру 3. Обработка ввода

Слайд 18

Обработка ввода

Touch Input Handling

Кросс-платформенное API

Touch API

Xbox 360 Controllers (Xbox/Windows)
Keyboard (Xbox/Windows/Windows Phone 7)

Для

Обработка ввода Touch Input Handling Кросс-платформенное API Touch API Xbox 360 Controllers
совместимости есть на всех платформах (не нужно #ifdef)
На Windows Phone 7 и Windows поддерживает Multipoint
Учитывает ориентацию и разрешение

var touchCollection = TouchPanel.GetState();
//...
foreach (var touchLocation in touchCollection)
{
if (touchLocation.State ==
TouchLocationState.Released)
{
//...
}
}

Состояние и опрос вместо событий

Кросс-платформенное API

Touch API

Слайд 19

Пишем игру 4. Звук и музыка

Пишем игру 4. Звук и музыка

Слайд 20

Захват звука

public void EventDrivenCapture()
{
mic = Microphone.Default;
buffer = new byte[mic.GetSampleSizeInBytes(mic.BufferDuration)];
mic.BufferReady

Захват звука public void EventDrivenCapture() { mic = Microphone.Default; buffer = new
+= new EventHandler(OnBufferReady);
DynamicPlayback = new DynamicSoundEffectInstance(mic.SampleRate,
AudioChannels.Mono);
}
public void OnBufferReady(object sender, EventArgs args)
{
// Get the latest captured audio.
int duration = mic.GetData(buffer);
// Do some post-capture processing and playback.
MakeMeSoundLikeARobot(buffer, duration);
DynamicPlayback.SubmitBuffer(buffer);
}

Захват и воспроизведение

Простой API для проигрывания WAV
Изменить pitch, volume, pan
Синтез/буферизация аудио
Сериализация захваченных данных
Контроль над типами System.Media в Windows Phone 7
Поддержка Bluetooth (захват/воспроизведение)

Воспроизведение

// Load a sound effect from a raw stream
SoundEffect effect1 =
SoundEffect.FromStream(GetStreamFromTheWeb("http://url.wav"));
effect1.Play();
// Create dynamic audio on the fly
byte[] fluteSound = GetFluteNote();
effect2 = new SoundEffect(fluteSound, SampleRate, AudioChannels.Stereo);
SoundEffectInstance instance = effect2.CreateInstance();
instance.Pan = -1; instance.Pitch = 1.5f;
instance.Play();

Звук

Захват и воспроизведение

Слайд 21

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

Выбор изображения

// Constructs a song from a URI
Uri mediaStreamUri = new

Воспроизведение музыки Выбор изображения // Constructs a song from a URI Uri
Uri("http://song.asx");
Song streamedSong = Song.FromUri("Song", mediaStreamUri);
// Play the song
MediaPlayer.Play(streamedSong);
MediaLibrary media = new MediaLibrary();
// Get the JPEG image data
Stream myJpegImage = ReadAndModifyPicture(somePicture);
// Save texture to Media Library  
media.SavePicture("Awesome", myJpegImage);

Автоматическое управление списком медиа в игре
Можно воспроизводить по URI/URL

Поддержка выбора.публикации фотографий

Поддержка Video Player API
Показать или убрать элементы управления

Поиск и воспроизведение музыки

Перебор и просмотр изображений

Воспроизведение видео

Музыка/фото/видео

Слайд 22

Дальнейшие улучшения Компонентизация игры

Дальнейшие улучшения Компонентизация игры

Слайд 23

Компонентизация игры

Контент
Выделение в отдельный проект
Разделение по директориям
Код
Выделение классов под объекты игры
GameComponent /

Компонентизация игры Контент Выделение в отдельный проект Разделение по директориям Код Выделение
DrawableGameComponent
Game State Management
Хорошие ресурсы:
http://create.msdn.com/en-US/education/catalog/sample/game_state_management
Catapult Wars Lab http://msdn.microsoft.com/en-us/WP7TrainingCourse_2DGameDevelopmentWithXNALab

Слайд 25

3D-графика

World Matrix
Преобразование модели перед отображением
Camera View Matrix
Направление обзора
Camera Projection Matrix
Угол обзора /

3D-графика World Matrix Преобразование модели перед отображением Camera View Matrix Направление обзора
фокусное расстояние
Плоскости отсечения

Слайд 26

3D-графика и работа с жестами

3D-графика и работа с жестами

Слайд 27

Эффекты

Эффекты, доступные на всех платформах

BasicEffect

SkinnedEffect

EnvironmentMapEffect

DualTextureEffect

AlphaTestEffect

Эффекты Эффекты, доступные на всех платформах BasicEffect SkinnedEffect EnvironmentMapEffect DualTextureEffect AlphaTestEffect

Слайд 28

Основные жесты WP7

Tap
Double Tap
Pan
FreeDrag | Horizontal Drag | Vertical Drag
Drag -> DragComplete
Flick

Основные жесты WP7 Tap Double Tap Pan FreeDrag | Horizontal Drag |
(всегда после Pan)
Hold
Pinch / Stretch
Pinch -> PinchComplete

Слайд 29

Законченная игра + работа с акселерометром

Законченная игра + работа с акселерометром

Слайд 30

Оптимизация и производительность

Оптимизация и производительность

Слайд 31

Производительность

Нет лишней сборки мусора
Аппаратное ускорение графики / масштабирования
Оптимизированные библиотеки математики
Более 3 лет

Производительность Нет лишней сборки мусора Аппаратное ускорение графики / масштабирования Оптимизированные библиотеки
оптимизации производительности
Более 800 игра на XBox Live Arcade / XBox Indie Games

XNA – производительная платформа, несмотря на управляемый код!

Проверка опытом!

Слайд 32

Content Pipeline

Управляем содержимым прямо в Visual Studio
Импортеры для основных игровых форматов
Оптимизация в

Content Pipeline Управляем содержимым прямо в Visual Studio Импортеры для основных игровых
двоичный формат для эфф.загрузки
Полностью расширяемая – возможно создавать свои классы, которые делаю эффективный препроцессинг ресурсов и обрабатывают дальнейшую загрузку (Content.Load<…>)
Внешний контентный проект позволяет использовать единый набор ресурсов для различных игровых платформ

перенос части операций на время компиляции

Слайд 33

Оптимизация игры

Оптимизация загрузки контента
Уменьшение размера
Загрузка в правильное время
Загрузка больших изображений
Оптимизация работы с

Оптимизация игры Оптимизация загрузки контента Уменьшение размера Загрузка в правильное время Загрузка
памятью
Больше Value Types
Вызов GC.Collect()
Простные структуры < 1Mb
Работа в меньшем разрешении + автомасштабирование
Tombstoning

Слайд 34

Построение множества Мандельброта (Ч.Петцольд)

Построение множества Мандельброта (Ч.Петцольд)

Слайд 35

Physics Engines

http://farseerphysics.codeplex.com/
http://helium.codeplex.com/

Physics Engines http://farseerphysics.codeplex.com/ http://helium.codeplex.com/

Слайд 36

Новое в Mango

Новое в Mango

Слайд 37

Что нового в Mango XNA

Интеграция XNA и Silverlight

Новая модель выполнения и быстрое

Что нового в Mango XNA Интеграция XNA и Silverlight Новая модель выполнения
переключение приложений

Motion API

Возможность включения Silverlight-интерфейса в игру (необходима явная отрисовка и рендеринг интерфейса в методе Draw)
Возможность включения игровой составляющей в Silverlight-проект

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

Новые аппаратные возможности, включая гироскоп и компас
API позволяет автоматически обрабатывать данные от всех датчиков, получая уточненные данные об ориентации / местоположении

Слайд 38

Интеграция SL+XNA и Motion Sensor

Интеграция SL+XNA и Motion Sensor

Слайд 39

Motion API vs. Accelerometer

Новый API Montion() позволяет получить:
Attitude
Pitch, Yaw and Roll
Rotation rate
Direction

Motion API vs. Accelerometer Новый API Montion() позволяет получить: Attitude Pitch, Yaw
of Gravity
Использует все доступные сенсоры для получения наиболее точных измерений
Очень полезен для приложений дополненной реальности и игр
Доступен только для Mango

Слайд 40

Что дальше?

Что дальше?

Слайд 41

Дальнейшие ресурсы для изучения

Сегодняшняя игра: http://blogs.msdn.com/b/sos/archive/tags/xna/
Windows Phone 7 Training Kit
2D-игра: http://msdn.microsoft.com/en-us/WP7TrainingCourse_2DGameDevelopmentWithXNALab
3D-игра:

Дальнейшие ресурсы для изучения Сегодняшняя игра: http://blogs.msdn.com/b/sos/archive/tags/xna/ Windows Phone 7 Training Kit
http://msdn.microsoft.com/en-us/WP7TrainingCourse_3DGameDevelopmentWithXNALab
На русском языке для offline: https://rusdpe.blob.core.windows.net/downloads/RusWP7TrainingKit.zip
App Hub Jumbstart Tutorial: http://create.msdn.com/en-US/education/tutorial/2dgame/getting_started
Чарльз Петзольд. Программируем Windows Phone 7: http://rusdpe.blob.core.windows.net/downloads/Programming_Windows_Phone_7_ru.pdf
Сообщество xnadev.ru

Слайд 42

Windows Phone 7 Student Bootcamp

1 октября 2011 г. в Московском офисе Майкрософт
О

Windows Phone 7 Student Bootcamp 1 октября 2011 г. в Московском офисе
регистрации будет объявлено дополнительно (http://twitter.com/shwars)
Вход по предъявлению студенческого билета
Регистрируйтесь и приходите: с ноутбуками, с идеями, с приложениями
Что планируется?
Немного лекций
Формирование команд и коллективный мозговой штурм идей
Консультации с экспертами из Майкрософт
Краткая демонстрация проекта и символическое награждение победителя
Имя файла: Разработка-игр-для-Windows-Phone-7интерактивное-представление.pptx
Количество просмотров: 125
Количество скачиваний: 0