windows phone 7 game development
DESCRIPTION
Presentation from Microsoft SWIT 2010 ConferenceTRANSCRIPT
Разработка игр для Windows Phone 7
Сергей ЛутайDigital Cloud Technologies
Содержание
Технологии
Быстрое создание пользовательского интерфейсаСобытийная модель приложенияHTML/JavascriptРазработка бизнес приложений
Высоко-производительная платформаБыстрое создание многоэкранных 2D и 3D игр Широко применяемая платформа: Xbox, Windows, and Zune
ИГРЫ(и приложения)ПРИЛОЖЕНИЯ
(и игры)
XNA Framework Game Loop и Silverlight Application равноправные технологии Windows Phone 7
Большинство типов XNA можно использовать в Silverlight приложениях
Включая Gamer Services (Xbox LIVE)
Базовые типы отличаютсяСцены используют GraphicsDevice из XNA Framework и страницы используют UIElement из Silverlight
Можно выбрать технологию, которая лучше всего подходит для вашего приложения
Совместное использование
ГрафикаГотовый набор элементов управленияВекторная графика с использованием XAML
Медиа Мощная поддержка видео контента
ИнструментИспользуем Expression Blend и VS
Выбор технологии
ГрафикаИспользование 2D и 3D графикиИмитация/рисованиеИспользование циклов для обновления состоянияИнструментыИспользование XNA Framework Графические типы Content Pipeline
Выбор технологии
Мощный
Эффективный
Доступный
XNA Game Studio
Сделайте разработку легче
XNA Framework обеспечивает мощныйAPI для игр
C#, .NET и Visual Studio
Шаблоны проектов для игр
XNA - это инфраструктура
Игры
XNA Game Studio 4.0
Разработка для
Windows Phone 7 Упрощенный
графическийAPI
Интеграция с Visual
Studio 2010
Улучшена поддержк
а аудио
Новые конфигура-
ционныеэффекты
Мощный
.NET платформа
Управляемый код для разработки игр
Windows Phone 7
Платформа управляемого кода
XNA Game Studio 4.0 - только C#
800+ игр
Windows игры публикуются через
порталы
.NET/XNA используется
для игр сегодня!
Frameworks designed
for performance
Нацеленность на производительность
Frameworks designed
for performance
Инфраструктура разработана для
производительности
Frameworks designed
for performance
XNA Framework разработан для
игровых сценариев
Платформа будущего..
Исключена лишняя генерация мусора
Оптимизированы мат. библиотеки
Эффективный API взаимодействия с
системой нижнего уровня
3+ лет профилирования и развития
Произвольность на Windows Phone 7
Эффективный
Visual Studio и .NET
• Эффективная разработка с .NET и C#
• Производительная IDE• Подсказки• Встроенная отладка• MSBuild
Конвеер контентаУпрощает управление контентом!
Управление в Visual Studio
Импортирование известных игровых форматов
Оптимизация данных в двоичный формат для эффективной загрузки
Полностью расширяемая
XNA Framework/Game Loop необязателен
Упрощает разработку игр
XNA Framework
XNA
.NET Framework
Windows
XNA
ГрафикаУстройства
ввода
XBox 360Zune /
Windows Phone 7
.NET Compact Framework
XNA Game Studio
ЗвукМатематик
а
Архитектура XNA
Платформа
Библиотека
Инфраструктура
Игры
Graphics
Модель приложения
Код Контент Компоненты
Ковеер контента
Graphics Audio Input Math Storage
Direct3D XACT XINPUT XContent
Starter Kits
Базовый класс
public class MyGame : Microsoft.Xna.Framework.Game{ protected override void Initialize(); protected override void LoadContent(); protected override void Update(GameTime gameTime); protected override void Draw(GameTime gameTime);}
Пример
Система разработана с учётом лучших практик для Windows Phone 7
Используется существующий концепт XNA Framework
Фреймовый цикл
Совместимость с предыдущими версиямиУвеличена производительность на устройствах
XNA Framework игровой цикл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);}
Графика
Обзор
Развитие существующего API отображения
Упрощено управление ресурсами и состояниями
Отображение 2D и 3D форм
Настраиваемые эффекты
Новые эффекты на всех платформах
BasicEffect
SkinnedEffect
EnvironmentMapEffect
DualTextureEffect
AlphaTestEffect
Пользовательские эффекты пока не
доступны в Windows Phone 7
Поддержка: масштабирование и ориентация
Пишите игры не думая о разрешении и ориентацииАвтоматическое вращение между ориентациями дисплеяКасание автоматически поддерживается при измененом масштабировании
Масштабирование может радикально увеличить производительность
Масштабирование/Вращение выполняется на уровне железа
Аудио & Медиа
Пример
Аудио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);}
Захват аудио и воспроизведение
Поддержка Microphone/Bluetooth
Пример// Load a sound effect from a raw streamSoundEffect effect1 = SoundEffect.FromStream(GetStreamFromTheWeb("http://url.wav"));effect1.Play();
// Create dynamic audio on the flybyte[] fluteSound = GetFluteNote();effect2 = new SoundEffect(fluteSound, SampleRate, AudioChannels.Stereo);SoundEffectInstance instance = effect2.CreateInstance();instance.Pan = -1; instance.Pitch = 1.5f;instance.Play();
Пример
Пример
Воспроизведение аудио
Медиа – Музыка/Фото/Видео// Constructs a song from a URIUri mediaStreamUri = new Uri("http://song.asx");Song streamedSong = Song.FromUri("Song",
mediaStreamUri);
// Play the songMediaPlayer.Play(streamedSong);
MediaLibrary media = new MediaLibrary();
// Get the JPEG image dataStream myJpegImage = ReadAndModifyPicture(somePicture);
// Save texture to Media Library media.SavePicture("Awesome", myJpegImage);
Отображение картинок
Воспроизведение видео
Ввод касанием
Простое взаимодействие с игрой!
Пример
Кросс платформенный API тача
Touch API
Xbox 360 джойстики (Xbox/Windows)
Клавиатура (Xbox/Windows/Windows Phone 7)
Кросс платформенная портируемость
Мультитач на Windows Phone 7 и Windows
Обзор
var touchCollection = TouchPanel.GetState();
//...
foreach (var touchLocation in touchCollection){ if (touchLocation.State == TouchLocationState.Released) { //... }}
Сенсоры
Для Silverlight и XNA
Пример
ПримерВозможности Windows Phone 7Location
Accelerometer
Vibration
Обзор
Accelerometer accelerometer = new Accelerometer();
accelerometer.ReadingChanged +=
AccelerometerReadingChanged;
accelerometer.Start();
VibrateController rumbler;rumbler.Start(TimeSpan.FromSeconds(2));
Использование сенсоров…
Демо
Xbox Live
Как устроено
Windows Phone 7 OS
Xbox LIVE
Gamer Services
HTTP
Invites
ProfileAchieve-ments
Leader-boards
TrialMode
Push
Avatars
Профиль
Ваша личность в облакеТелефон знает о вашем
Windows Live ID Связывание с вашим Gamertag
ПрофильПример
// Profile accessSignedInGamer gamer = Gamer.SignedInGamers[0];
// Get the player's GamerTag to displaystring gamerTag = gamer.Gamertag;
// A SignedInGamer has a ProfileGamerProfile profile = gamer.GetProfile();
// Get the player's current GamerScoreint gamerScore = profile.GamerScore;
// get the gamer picture (PNG file stream)Stream gamerPictureStream = profile.GamerPicture;
Достижения Пример// Award an achievementSignedInGamer gamer = Gamer.SignedInGamers[0];gamer.AwardAchievement("Attended TechEd 2010");
Пример// Get achievementsAchievementCollection achievements = gamer.GetAchievements();
// walk through achievementsforeach (Achievement a in achievements){
string name = a.Name;string description = a.Description;bool earned = a.IsEarned;int score = a.GamerScore;
Stream icon = a.Picture; }
Реальные достижения
Реальные балы
РейтингПример
// Create leaderboard identity with game mode 1LeaderboardIdentity id = LeaderboardIdentity.Create(LeaderboardKey.BestScoreLifeTime, 1);
// get the leaderboard writer from the signed in gamerLeaderboardWriter writer = gamer.LeaderboardWriter;
// get the leaderboard entry for the identityLeaderboardEntry entry = writer.GetLeaderboard(id);
// write new leaderboard dataentry.Rating = 1000;entry.columns.SetValue("Outcome", LeaderboardOutcome.Win);
Связывание с
друзьями
Основанная на
балах или
времени
Фиксированные
данные
Пример// Read from leaderboard with page size of 10LeaderboardReader reader = LeaderboardReader.Read(id, gamer, 10);
foreach (LeaderboardEntry e in reader.Entries){
// score or time, as defined by identity. Rating determines rank.long rating = e.Rating;// read additional column datalong wins = e.Columns.GetValueInt64("Wins");Stream blob = e.Columns.GetValueStream("Blob");}
reader.PageDown();
Триальный режим
ПримерGuide.SimulateTrialMode = true;
// if we are in trial mode, show a marketplace offeringif (Guide.IsTrialMode){
PlayerIndex playerIndex = Gamer.SignedInGamers[0].PlayerIndex;Guide.ShowMarketplace(playerIndex);}
Простая проверкаЭмуляция игрыВозможность купить игру
АватарыСейчас поддерживаеться только через
веб сервисЗагружается как поток
Приглашение в игру
Отсылаются через почтуGuide.ShowGameInvite() отображает интерфейс приглашенияИгрок выбирает в какую игру отсылать приглашениеДрузья видят приглашения в своем
игровом хабе.
Доступный
XNA Frameworkкросс платформенный
Тратим меньше времени и получаем больше устройств
Синхронизация проектов между платформами
Три экрана
Кроссплатформенные игры…
Демо
ИтогМощный
Эффективный
Доступный
Управляемый код, работает уже сегодняWindows Phone обеспечивает мощную платформу для игр
Разработчик сосредотачивается на игреЭффективные инструменты разработки делают нас более продуктивными
Легко расширяется на другие платформыПозволяет сфокусироваться на игре, не на технологии
Ресурсы
Сотни примеров
Большое сообщество экспертов поможет начать работать с XNA
XNA Creators Club @ http://creators.xna.com
Team Blog @ http://blogs.msdn.com/xna/
Shawn Hargreaves @ http://blogs.msdn.com/shawnhar/
Email: [email protected]
On the web: http://developer.windowsphone.com
Peer Support @ http://forums.xna.
comBlogs Contact Microsoft
Сергей ЛутайРуководитель департамента
разработки Silverlight приложенийMVP, MCT, MCPD
[email protected]://lutay.uneta.com.ua
@sergeylutay