540 likes | 743 Views
Разработка игр для Windows Phone 7. и нтерактивное представление. Дмитрий Сошников. Координатор академических программ. Майкрософт Россия. DT210. dmitryso@microsoft.com ; twitter: @ shwars. Содержание . Мы напишем простую 2D- игру «Морской бой» менее, чем за 30 мин
E N D
Разработка игр для Windows Phone 7 интерактивное представление Дмитрий Сошников Координатор академических программ Майкрософт Россия DT210 dmitryso@microsoft.com; twitter: @shwars
Содержание • Мы напишем простую 2D-игру «Морской бой» менее, чем за 30 мин • Посмотрим другие примеры игр • Также вы узнаете • Разработка для WP7: Silverlight vs. XNA • XNA – не только для игр! • Концепция 3 экранов и разработка под 3 экрана • Управление телефоном: multitouchи жесты • Облачные игры: XBox Live
Разработка под 3 экрана XNA Game Studio XNA Framework
Выбор платформы Silverlight XNA
Выбор платформы • Современные приложения, управляемые событ-ми. • Быстрое создание богатых графических приложений • HTML/Javascript • Устоявшаяся, надёжная, популярная технология • Высокопроизводительная игровая платформа • Быстрое создание многоэкранных 2D и 3D игр • Богатая content pipeline • Устоявшаяся технология для Xbox, Windows, и Zune/WP7 Приложения (и игры) Игры(и приложения)
Самая главная мысль на сегодня! Программная модель XNA основана на игровом цикле, а не на событиях!
Игровой цикл • public void LoadContent(…) • { • … • } • public void Update(…) • { • … • } • public void Draw(…) • { • … • } LoadContent Update Draw
Что нужно, чтобы пробовать? • Windows Phone Developer Tools • Visual Studio 2010 Express for Windows Phone • Интеграция с VS 2010 Pro • Видеокарта с DirectX 10 • Windows Phone 7 – не обязателен!
Игровой цикл Демонстрация
Разработка под 3 экрана XNA Game Studio XNA Framework
Content Code Components Storage Math Input Audio Graphics XContent Starter Kits Content Pipeline XINPUT XACT Direct3D Application Model Архитектура XNA Games Extended Framework Core Framework Platform
Обработка ввода Состояние и опрос вместо событий Кросс-платформенное API Xbox 360 Controllers (Xbox/Windows) Keyboard (Xbox/Windows/Windows Phone 7) Touch Input Handling vartouchCollection= TouchPanel.GetState(); //... foreach(vartouchLocationintouchCollection) { if(touchLocation.State == TouchLocationState.Released) { //... } } Touch API Для совместимости есть на всех платформах(не нужно #ifdef) На Windows Phone 7 и Windows поддерживает Multipoint Учитывает ориентацию и разрешение
Работа с устройствами ввода Демонстрация
Масштабирование / ориентация Пишем игру без учёта нативного разрешения и ориентации экрана Автоматический поворот между портретным и ландшафтным режимамиTouch API автоматически поддерживает изменение ориентации Масштабирование для поднятия производительности Компромисс между производительностью и четкостью800x480 = 384,000 пикселей, 480x320 = 153,600 пикселей Масштибирование в обе стороны к нативному разрешению Много лучше, чем билинейная фильтрацияПростой перенос игр с других платформ Поворот / масштабирование на аппаратном уровне!
Работа с ориентацией Демонстрация
Audio Capture Example Звук publicvoidEventDrivenCapture() { mic= Microphone.Default; buffer = new byte[mic.GetSampleSizeInBytes(mic.BufferDuration)]; mic.BufferReady += newEventHandler(OnBufferReady); DynamicPlayback = newDynamicSoundEffectInstance(mic.SampleRate, AudioChannels.Mono); } publicvoidOnBufferReady(object sender, EventArgsargs) { // 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 Audio Playback Example // Load a sound effect from a raw stream SoundEffecteffect1 = SoundEffect.FromStream(GetStreamFromTheWeb("http://url.wav")); effect1.Play(); // Create dynamic audio on the fly byte[] fluteSound = GetFluteNote(); effect2 = newSoundEffect(fluteSound, SampleRate, AudioChannels.Stereo); SoundEffectInstanceinstance = effect2.CreateInstance(); instance.Pan = -1; instance.Pitch = 1.5f; instance.Play(); Microphone/Bluetooth Support Воспроизведение на наушниках Ввод с микрофона
Музыка/фото/видео URI Song Playback Example Поиск и воспроизв.музыки // Constructs a song from a URI UrimediaStreamUri = newUri("http://song.asx"); SongstreamedSong = Song.FromUri("Song", mediaStreamUri); // Play the song MediaPlayer.Play(streamedSong); Автоматическое управление списком медиа в игре Можно воспроизводить по URI/URL Picture Enumeration and Playback Поддержка выбора.публикации фотографий Retrieve Image Data MediaLibrarymedia =newMediaLibrary(); // Get the JPEG image data StreammyJpegImage = ReadAndModifyPicture(somePicture); // Save texture to Media Library media.SavePicture("Awesome", myJpegImage); Воспроизведение видео Поддержка Video Player API Показать или убрать элементы управления
Компонентизация игры • Контент • Выделение в отдельный проект • Разделение по директориям • Код • Выделение классов под объекты игры • GameComponent / DrawableGameComponent • Game State Management • Хорошие ресурсы: • http://create.msdn.com/en-US/education/roadmap • Offline Windows Phone 7 Training Kit
Catapult Wars Sample Демонстрация
Графика Эволюция существующего immediate mode rendering API Простое управление ресурсами и состоянием рендеринга Возможности меняются для“Reach”/“HiDef” profiles 2D и 3D примитивы
3D-графика • World Matrix • Преобразование модели перед отображением • Camera View Matrix • Направление обзора • Camera Projection Matrix • Угол обзора / фокусное расстояние • Плоскости отсечения
Эффекты BasicEffect SkinnedEffect Доступны на всех платформах EnvironmentMapEffect DualTextureEffect Custom effects (шейдеры) недоступны на Windows Phone 7 AlphaTestEffect
3D-графикаи работа с жестами Демонстрация
Основные жесты WP7 • Tap • Double Tap • Pan • FreeDrag | Horizontal Drag | Vertical Drag • Drag -> DragComplete • Flick (всегда после Pan) • Hold • Pinch / Stretch • Pinch -> PinchComplete
Законченная игра + работа с акселерометром Демонстрация
Производительность • Оптимизация загрузки контента • Уменьшение размера • Загрузка в правильное время • Оптимизация работы с памятью • Больше Value Types • Вызов GC.Collect() • Простные структуры < 1Mb • Работа в меньшем разрешении + автомасштабирование • Tombstoning
Построение множества Мандельброта (Ч.Петцольд) Демонстрация
Engines http://farseerphysics.codeplex.com/ http://helium.codeplex.com/
Powerful Productive Portable
Производительная Продуктивная Переносимая
Игры на управляемом коде? Frameworks designed for performance Frameworks designed for performance Frameworks designed for performance Разработаны с требованием производителности Опробованный успех на игровых сценариях В будущее WP7 – с управляемым кодом! Нет лишней сборки мусора 3+ года профилирования и оптимизации Эффективная работа на WP7 Оптимизированные мат.библиотеки Более 800.NET-игр на XBLA / XBIG API с переходом на нативный код
Visual Studio – среда разработки • Эффективная разработка с .NET и C# • Знакомая удобная среда разработки • Intellisense • Интегрированная среда build/deploy/debug • MSBuild engine для автоматизации процесса сборки
Content Pipeline Упрощает использование контента! Управляем содержимым прямо в Visual Studio Импортеры для основных игровых форматов Оптимизация в двоичный формат для эфф.загрузки Полностью расширяемая Не требуется XNA Framework/Game Loop В XNA 4.0 – внешние контентные проекты
Разработка под 3 экрана XNA Framework разрабатывалась кросс-платформенной Меньшее время разработки -большее кол-во клиентов Синхронизация проектовмежду платформами
Профили оборудования Баланс между переносимостью и богатством возможностей. Совместимость между экранами / устройствами Включая Windows Phone 7 Reach Лучшие возможности платформы Только Xbox 360/Windows HiDef
Что нового в XNA 4.0 Улучшенная поддержка звука Разработка для Windows Phone 7 Упрощенный API работы с графикой Интеграция с Visual Studio 2010 Новые конфи-гурируемые эффекты
Ресурсы для изучения • Windows Phone 7 на MSDN по-русски • http://msdn.microsoft.com/ru-ru/windowsphone/default.aspx • Windows Phone 7 Training Kit по-русски https://rusdpe.blob.core.windows.net/downloads/RusWP7TrainingKit.zip • Одна ссылка: http://create.msdn.com • Windows Phone 7 Training Course XNA Unit: http://msdn.microsoft.com/en-us/wp7trainingcourse_wp7xna_unit • Сообщество: http://xnadev.ru • Книга Чарльза Петцольда Programming Windows Phone 7: http://download.microsoft.com/download/5/0/A/50A39509-D015-410F-A8F2-A5511E5A988D/Microsoft_Press_ebook_Programming_Windows_Phone_7_PDF.pdf
Выбираем Silverlight Графика Много элементов управления Векторная графика в XAML Мультимедиа Богатая поддержка в приложении Инструментарий Используем Microsoft Blend в процессе разработки
Выбираем XNA Графика 3D-графика 2D-приложения с активным использованием спрайтов Моделирование/отрисовка Если предпочтительна циклическая модель приложения Инструментарий Используем графические форматы, поддерживаемые XNA Framework Content Pipeline
Интеграция Silverlight/XNA XNA Framework Game Loop работает поверх Silverlight Application object на Windows Phone 7 Существуют API для интеграции Часть XNA Framework доступна из Silverlight-приложений Включая игровые сервисы (Xbox LIVE) На текущий момент интеграция не полная Сцены с GraphicsDeviceв XNA Framework и UIElementsиз Silverlight Надо выбирать подходящую технологию для вашего сценария
Дальнейшие шаги Скачать Windows Phone Developer Tools http://developer.windowsphone.com http://creators.xna.com http://channel9.msdn.com/Learn/Courses/ WP7TrainingKit/WP7XNA http://xnadev.ru http://techdays.ru
Выводы Производительная Windows Phone 7 – это мощная игровая платформа Управляемый код обеспечивает производительные игры Продуктивная Отличные знакомые инструменты для разработки (Visual Stuio) Можно сконцентрироваться на логике/контенте Переносимая Поддержка трех экранов в едином проекте Фокусируемся на игре, а не на технологиях
Обратная связь Ваше мнение очень важно для нас. Пожалуйста, оцените доклад, заполните анкету и сдайте ее при выходе из зала Спасибо!