Платформа разработки windows phone 7
TRANSCRIPT
Платформа разработки Windows Phone 7
Михаил Черномордиков Эксперт по стратегическим технологиям [email protected], twitter: @mixen
Принципы
UX
9
Начало: стартовый экран
Навигация: страницы
Z-order
Платформа
Capacitive touch 4 or more contact points
Sensors A-GPS, Accelerometer, Compass, Light, Proximity, Gyro
Camera 5 mega pixels or more
Multimedia Common detailed specs, Codec acceleration
Memory 256MB RAM or more, 8GB Flash or more
GPU DirectX 9 acceleration
CPU Qualcomm MSM7x30, MSM8x55 800Mhz or higher
Hardware buttons | Back, Start, Search
Kernel Hardware BSP
App Model UI Model Cloud Integration
Applications
App management Licensing Chamber isolation Software updates
Shell frame Session manager Direct3D Compositor
Xbox LIVE Bing Location Push notifications Windows Live ID
Your App UI and logic
A-GPS Accelerometer Compass Light Proximity Media Wi-Fi Radio Graphics
Security Networking Storage
Frameworks
Silverlight XNA HTML/JavaScript
CLR
Hardware Foundation
Common Base Class Library
Collections ComponentModel Configuration
Diagnostics Reflection IO
Security Threading
Runtime Resources Globalization Text Location Net
ServiceModel Linq
Application Object
Silverlight Presentation and Media XNA Frameworks for Games
Windows Phone Frameworks
Navigation Shapes Markup Media
Controls Drawing IsolatedStorage
Audio Media Graphics Input
Drawing GamerServices
Content
PhoneApplicationPage PushNotification WebBrowserControl Sensors PhoneApplicationFrame
Camera Device Integration Launchers &
Choosers Windows Phone
Controls
Tombstoning Происходит когда приложение теряет фокус Возможные причины:
кнопка «Назад», кнопка «Старт», клик на Toast-уведомление, запуск системных диалогов, телефонный звонок
Обработчики событий в App.xaml.cs События
Application_Launching, Application_Activated, Application_Deactivated, Application_Closing
API для интеграции с существующими сервисами
Новые сервисы: специально для Windows Phone 7
Сервисы-посредники и готовые сценарии
Windows Phone
Cloud integration client services
Frameworks
Windows
Phone
Application
Ваши веб-сервисы
Custom Web Service
Существующие сервисы
Сервисы Microsoft
Notification Service
Location Service
Пока единственный способ «разбудить» приложение
Доставляем информацию, экономя батарею
Windows Phone Your Web Service
Custom Web Service
Existing Web Services
Microsoft Services
Push client service
Microsoft.Phone.Notification Notification Service
Silverlight и XNA
Современные приложения, управляемые событ-ми.
Быстрое создание богатых графических приложений
HTML/Javascript
Устоявшаяся, надѐжная, популярная технология
Высокопроизводительная игровая платформа
Быстрое создание многоэкранных 2D и 3D игр
Богатая content pipeline
Устоявшаяся технология для Xbox, Windows, и Zune / WP7
Игры (и приложения)
Приложения (и игры)
XNA Game Studio 4.0 Эффективная разработки с .NET и C#
Знакомая удобная среда разработки
Intellisense
Интегрированная среда build/deploy/debug
MSBuild engine для автоматизации
процесса сборки
Использование .NET
Windows Phone 7
Только защищѐнный код
XNA Game Studio 4.0 – только C#
850+ игр на XBLA/XBLIG
Игры публикуются через порталы
Как используется .NET/XNA
Frameworks designed
for performance
Frameworks designed
for performance
Разработаны с требованием
производителности
Frameworks designed
for performance
Опробованный успех на игровых
сценариях
В будущее WP7 – с управляемым
кодом!
Нет лишней сборки мусора
Оптимизированные мат.библиотеки
API с переходом на нативный код
3+ года профилирования и оптимизации
Эффективная работа на WP7
Core Framework
Graphics Audio Input Math Storage
Networking Gamer Services
Extended Framework
Application Model Content Pipeline
Игры
Starter Kits Ваш код Ваш контент Компоненты
Платформа
DirectX .NET CF
Networking Gamer Services*
XNA Framework разрабатывалась кросс-платформенной
Меньшее время разработки - большее кол-во клиентов
Синхронизация проектов между платформами
Standard Slide with subtitle
Типы файлов
Название импортера
Класс импортера
Выходной класс
.bmp, .dds,
.dib, .hdr,
.jpg, .pfm,
.png, .ppm,
.tga.
XNA Texture Importer
TextureImporter TextureContent
.fx XNA Effect Importer
EffectImporter EffectContent
.x XNA X File Importer
Ximporter NodeContent
.fbx XNA Autodesk FBX Importer
FbxImporter NodeContent
.xml XNA XML Importer
XmlImporter Object
.xap XNA XACT Project Importer
- -
Importers
XNA Framework Game Loop Example
Интеграция с лучшими практиками разработки для WP7
Транслируются в существующие модели XNA
Например, входящий звонок
Обновление - отрисовка
Программная модель, совместимая с предыдущими выпусками XNA
Улучшенная производительность
protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit(); // TODO: Add your update logic here
base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); }
Начни с простого и усложняй
BasicEffect
SkinnedEffect
EnvironmentMapEffect
AlphaTestEffect
DualTextureEffect
BasicEffect
SkinnedEffect
EnvironmentMapEffect
AlphaTestEffect
DualTextureEffect
• 0-3 источников света
• Освещение Blinn-Phong
• Текстурирование
• Туман
• Цвет вершин
Vertex Cost Pixel Cost
No lighting 5 1
One vertex light 40 1
Three vertex lights 60 1
Three pixel lights 18 50
+ Texture +1 +2
+ Fog +4 +2
BasicEffect
SkinnedEffect
EnvironmentMapEffect
AlphaTestEffect
DualTextureEffect
• Для lightmaps, detail textures, decals
• Смешивание двух текстур
• Раздельные текстурные координаты
• 2X модуляция (A*B*2)
• Низкая «стоимость»
Vertex Cost Pixel Cost
Two Textures 7 6
+ Fog +4 +2
BasicEffect
SkinnedEffect
EnvironmentMapEffect
AlphaTestEffect
DualTextureEffect
• Для billboards и imposters
• Добавляет операцию alpha test
• «Дешевый» эффект
Vertex Cost Pixel Cost
<, <=, >=, > 6 6
==, != 6 10
+ Fog +4 +2
BasicEffect
SkinnedEffect
EnvironmentMapEffect
AlphaTestEffect
DualTextureEffect
• Анимация моделей
• Обновление костей на CPU
• Vertex skinning на GPU
• Поддерживает до 72 костей
• 1, 2, или 4 веса для вешины
Vertex Cost Pixel Cost
One vertex light 55 4
Three vertex lights 75 4
Three pixel lights 33 51
+ Two bones +7 +0
+ Four bones +13 +0
+ Fog +0 +2
BasicEffect
SkinnedEffect
EnvironmentMapEffect
AlphaTestEffect
DualTextureEffect
• Диффузная карта + карта среды
• «Дешевый» способ сделать освещение
• Эффект Френеля
Vertex Cost Pixel Cost
One light 32 6
Three lights 36 6
+ Fresnel +7 +0
+ Specular +0 +2
+ Fog +0 +2
Touch Input Handling
Кросс-платформенное API
Touch API
Xbox 360 Controllers (Xbox/Windows)
Keyboard (Xbox/Windows/Windows Phone 7)
Для совместимости есть на всех платформах (не нужно #ifdef)
На Windows Phone 7 и Windows поддерживает Multipoint
Учитывает ориентацию и разрешение
var touchCollection = TouchPanel.GetState(); //... foreach (var touchLocation in touchCollection) { if (touchLocation.State == TouchLocationState.Released) { //... } }
Сенсоры
Акселерометр, GPS
Audio Capture Example
public void EventDrivenCapture() { mic = Microphone.Default; buffer = new byte[mic.GetSampleSizeInBytes(mic.BufferDuration)]; mic.BufferReady += 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); }
Захват и воспроизведение
Проигрывание звуковых файлов
Pitch, volume, pan audio
Синтез и буферизация
Запись звука
Вибрация
Microphone/Bluetooth Support
Воспроизведение на наушниках
Ввод с микрофона
Audio Playback Example
// 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();
URI Song Playback Example
Retrieve Image Data
Поиск и воспроизв.музыки // Constructs a song from a URI Uri mediaStreamUri = new 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);
Picture Enumeration and Playback
Воспроизведение видео
Автоматическое управление списком медиа в игре
Можно воспроизводить по URI/URL
Поддержка выбора.публикации фотографий
Поддержка Video Player API
Показать или убрать элементы управления
Windows Phone и Xbox Live
Windows Phone впервые расширяет бренд Xbox LIVE вне консоли
Windows Phone – первый шаг к повсеместным игровым сервисам
Это может быть вашим конкурентным преимуществом!
Gamertag
Друзья
Достижения
Размещение продуктовой рекламы
1.
2.
3.
http://create.msdn.com/gamedevelopment
Мини-игры
Примеры
Starter Kits
Mango
Мультизадачность Быстрое переключение Быстрое восстановление
Running
Deactivated
Dormant
Activated
Автоматическое сохранение состояния
Загружено или восстановлено
Приложение в памяти, ресурсы «отключены», потоки приостановлены
Tombstoned
Задача Реализация
Переключение задач пользователем
Fast App Switching
Уведомления и сигналы по расписанию
Background Notification
Загрузка файлов Background Transfer
Уведомления о событиях Push Notifications
Регулярные действия по расписанию; toast/tile updates; data pre-caching; etc.
Periodic Background Agent
Проигрывание музыки Background Audio Player
Синхронизация данных Resource-Intensive Agent
GPS-tracking Run under the lock screen
Можно
Tiles Toast Местоположение Сеть Файлы БД Аудио (через спец. агентов) …
Нельзя
Показывать UI XNA Микрофон и камера Сенсоры
Приложения хранят данные в Isolated Storage
Настройки
Неструктурированные данные
Структурированные данные в БД SQL Server CE
Настройки
App Управление
файлами
Файлы приложения
App Data Folder
Каталог приложения
Package Manager
App Root Folder
WP7 Isolated Storage APIs
Установка
DB
Файл БД
DB Файл БД
Custom Data Context
App Objects
Identity Management
Change Tracking
Update Processing
Object Materialization
Core ADO.NET (System.Data)
SQLCE ADO.NET Provider (System.Data.SqlServerCe)
SQL CE DB
.Call System.Linq.Queryable.Select( .Call System.Linq.Queryable.Where(
.Constant(Table(Wines)), '(.Lambda #Lambda1)), '(.Lambda #Lambda2))
.Lambda #Lambda1(db.Wines $w) { $w.Country == “USA" } .Lambda #Lambda2(w.Country $w) { $w.Name }
var query = from w in db.Wines where w.Country == “USA" select w.Name;
select Name
from Wines
where Country = “USA”
Имя и
фото
Остальные
данные
контакта
Встречи и
события
Windows Live Social YES YES YES
Exchange accounts
(Exchange и Google, etc.)
YES YES YES
Адресная книга от
оператора
YES YES n/a
Facebook YES NO NO
Другие сети в People
Hub (e.g., Twitter)
NO NO NO
Новые инструменты разработки уже в этом месяце!
http://blogs.msdn.com/b/microsoft_press/archive/2010/10/28/free-ebook-programming-windows-phone-7-by-charles-petzold.aspx
Платформа разработки Windows Phone 7
Михаил Черномордиков Эксперт по стратегическим технологиям [email protected], twitter: @mixen