Pull to refresh
0

Splash! – разработка игры для Windows Phone 7. Часть I

Reading time 5 min
Views 9.5K
Насколько быстро и просто можно создать полноценную игру для современного телефона, работающего под управлением Windows Phone 7? Что для этого нужно? И какие препятствия ждут разработчика на этом пути?

Постараемся ответить на все эти вопросы в процессе создания небольшой игры. И чтобы все было по настоящему – это будет не просто пример, а полноценное приложение, которое мы отправим в Windows Phone Marketplace.

Таким образом, в этой статье мы рассмотрим полный цикл создания игры – от появления идеи, и до публикации игры в Marketplace, не упуская ни одной детали этого процесса.

Идея игры


Мы не будем клонировать другие игры, а придумаем что-нибудь новое, интересное и красочное – специально для телефона с акселерометром и сенсорным экраном.

Пользователю доступен один шарик (белый) на игровом поле. Движениями этого шарика можно управлять при помощи акселерометра, наклоняя телефон в разные стороны, как будто шарик катается в прямоугольной коробочке.

На поле появляются цветные шарики и стремятся к белому шарику, чтобы покрасить его в свой цвет.
Пользователь может уничтожать цветные шарики, нажимая на них пальцами. При нажатии на них, шарики превращаются в цветные кляксы (кляксы затем постепенно исчезают). Вместо уничтоженных шариков постоянно появляются новые. За каждый уничтоженный шарик дается некоторое количество очков (зависит от уровня).

Уровень сменяется при наборе определенного количества очков. С каждым уровнем скорость и количество цветных шариков увеличивается. Количество уровней – не ограничено.

Цель игрока – набрать как можно больше очков.

Чтобы заставить игрока использовать акселерометр (а не только давить шарики пальцами), добавим в игру специальный шарик (черный), который нельзя раздавить, пока он через некоторое время не превратится в цветной.

Для реализации этой игры достаточно будет 2D-графики. Кроме того, потребуется проигрывать звуки и взаимодействовать с акселерометром и сенсорным экраном.

Среда разработки


Чтобы создавать приложения для Windows Phone 7, нам понадобится совсем немногое: Visual C# 2010 Express и Windows Phone Developer Tools. Оба продукта – совершенно бесплатны.
Идем на сайт Microsoft, скачиваем и устанавливаем эти инструменты: http://www.microsoft.com/express/Downloads. Windows Phone Developer Tools не хочет устанавливаться на Windows XP, но при желании можно сделать и это: http://www.brucebarrera.com/how-to-install-windows-phone-7-developer-tools-on-windows-xp. Но эмулятор телефона, скорее всего на Windows XP не запустится, поэтому лучше все-таки поставить Windows 7.

Если у вас уже есть Visual Studio 2010, то лучше поставить Windows Phone Developer Tools на нее, так как Visual C# 2010 Express заметно уступает студии по удобству.

Выбор технологии: XNA vs Silverlight


 vs 

После установки Windows Phone Developer Tools у нас в студии появилась возможность создавать новые типы проектов: Windows Phone Application и Windows Phone Game.

Какой же из них нам больше подходит?

Первый проект – это приложение на Silverlight для Windows Phone 7. Соответственно, в нем доступны почти все классы, которые есть в обычном Silverlight. Есть XAML и контролы, доступен дизайнер в студии и т.п.

Второй проект – это приложение на XNA 4.0. В нем уже нет никаких контролов, но зато есть игровой цикл и доступ к быстрым функциям аппаратной графики.

Судя по названию и описанию технологии, нам нужно именно XNA. Но может все-таки Silverlight тоже годится для написания игр? Однако простейший тест с Silverlight для Windows Phone тут же обнаруживает ограничение этой технологии – сотня одновременно движущихся небольших картинок переводит телефон в режим слайд-шоу. Пробуем сделать аналогичное на XNA – все работает быстро даже при намного большем количестве картинок.

Значит, будем делать игру на XNA. Жаль, что там нет никаких контролов – но пока, кажется, они особо не нужны.

Знакомство с XNA


Создаем в студии проект Windows Phone Game. Он появляется сразу с классом игры:
public class Game1 : Microsoft.Xna.Framework.Game
Сразу определимся, как пользователь будет держать телефон во время игры. Предполагаем, что удобнее будет держать телефон в одной руке (наклоняя телефон и управляя белым шариком), а второй рукой – нажимать на цветные шарики, превращая их в кляксы. Значит, нам нужен портретный режим игры. Вот его и выставим в конструкторе игры:

public Game1()
{
	graphics = new GraphicsDeviceManager(this);
	Content.RootDirectory = "Content";

	graphics.SupportedOrientations = DisplayOrientation.Portrait;
	graphics.PreferredBackBufferWidth = 480;
	graphics.PreferredBackBufferHeight = 800;
	graphics.IsFullScreen = true;
}

Далее, в этом классе для нас наибольший интерес представляют две функции: Update и Draw.

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);
}

Первая функция предназначена для обработки игровой логики. В ней мы будем производить получение данных о действиях пользователя (от акселерометра и тач-скрина) и расчет новых позиций всех игровых объектов.

Вторая же функция предназначена исключительно для отрисовки игровых объектов на экране.
Необходимо заметить, что суммарно время выполнения этих двух функций не должно превышать одной итерации игрового цикла. На телефоне это примерно 33 миллисекунды, так как частота игрового цикла – 30 кадров с секунду. Если время выполнения функций превысит эту величину, то игра будет тормозить, пропускать кадры и что еще хуже – пропускать действия пользователя.

То есть получается, что игра – это фактически реал-тайм приложение. Но как оно будет реагировать на действия Garbage Collector? Лучше всего избежать его внезапного вмешательства, так что будем аккуратно работать с объектами и не создавать их тысячами на каждой итерации. В общем-то, нам их и не требуется часто создавать – ведь все объекты игрового мира у нас будут относительно долгоживущими, а в качестве параметров функций будем использовать структуры либо ссылки на уже существующие объекты. И при таком раскладе Garbage Collector никак не сможет нам помешать.

Попробуем скомпилировать и запустить приложение. На некоторых компьютерах оно выдает сообщение, что XNA не может быть запущено в эмуляторе. В этом случае, можно сделать проект Windows Game и прицепить туда файлы (Add As Link) из нашего проекта Windows Phone Game. То есть, один и тот же XNA-код будет работать и для телефона, и для Windows (да и для XBOX 360 тоже).
Наконец, появляется окно, залитое фиолетовым цветом – результат выполнения функции GraphicsDevice.Clear(Color.CornflowerBlue).

В классе игры уже присутствует объект класса SpriteBatch. Собственно, этот объект – все, что нам потребуется при рисовании. Он содержит все необходимые методы для работы с 2D-графикой и текстом.

Но пока нам не хватает кое-чего очень важного – игрового контента.

Контент


Игровой контент – это различные ресурсы, которые необходимы для игры: текстуры (картинки, которыми мы будем рисовать), шрифты (нам ведь нужно будет выводить текст) и звуки.

Вместе с проектом Windows Phone Game сразу же создается другой проект, в названии которого присутствует слово Content. В этот проект нам надо добавить файлы с картинками и звуками.
Кроме того, в этом же проекте необходимо задать все шрифты, которые мы будем использовать для вывода текста.

Загружать контент в программе очень просто – при помощи функции Content.Load(assetName). Свойство Content доступно в классе игры. В качестве assetName надо передать имя ресурса, который мы добавили проект с контентом. Как правило, это просто имя файла без расширения. В качестве T надо указать тип контента, который нам требуется: Texture2D, SpriteFont или SoundEffect.

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

Вот теперь все приготовления завершены, и можно начинать делать игру. Подробней этот процесс будет описан во второй части. Ссылка на вторую часть
Tags:
Hubs:
+42
Comments 13
Comments Comments 13

Articles

Information

Website
www.enterra.ru
Registered
Founded
2001
Employees
51–100 employees
Location
Россия