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

    Насколько быстро и просто можно создать полноценную игру для современного телефона, работающего под управлением 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.

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

    Вот теперь все приготовления завершены, и можно начинать делать игру. Подробней этот процесс будет описан во второй части. Ссылка на вторую часть
    Enterra
    38.30
    Company
    Share post

    Comments 13

      +5
      Интересно. Жду продолжения со скриншотами и кодом.
        +1
        Сохранил в закладки на будущее, спасибо.
          0
          Интересно будет почитать про работу с акселерометром.
            0
            Весьма актуально, спасибо, ждём продолжения!
              0
              хочется разобраться с написанием игр и приложений, очень интенресно
                0
                Планируется ли как-то «упростить» игру (сделать еще ее одну версию без использования акселерометра). Дело в том, что мобильных устройств на базе Phone 7 не много, а на симуляторе тестировать приложение заточеное под акселерометр сложновато как то…
                  0
                  Мы как раз и тестировали не на эмуляторе (у нас он вообще не запустился для XNA), а на Windows Game проекте. В статье этот момент как раз описан в главе «Знакомство с XNA»:

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

                  А в этом проекте акселерометр легко эмулируется с помощью стрелочек на клавиатуре компьютера.
                    0
                    Спасибо за разъяснение.
                    Подскажите еще кое что: входит ли Windows Game проект в Windows Phone Developer Tools (я так понимаю нет). Т.е. нужно ли качать XNA Game Studio Express (уж не знаю так ли называется)?
                      0
                      Нет. The Windows Phone Developer Tools includes the following:
                      •Visual Studio 2010 Express for Windows Phone
                      •Windows Phone Emulator Resources
                      •Silverlight 4 Tools For Visual Studio
                      •XNA Game Studio 4.0
                      •Microsoft Expression Blend for Windows Phone
                        0
                        Да, а еще стоит сказать, что для запуска эмулятора необходимо Win7.
                    0
                    Можно пользоваться решениями вроде наработок по проброске информации с Wiimote или платы с акселерометром на эмулятор, есть уже несколько готовых работающих решений. Но все же практика показала, что если хочется действительно сесть и сделать что-то серьезное, то «живой» девайс полезнее, благо достать его вполне реально.
                    0
                    Кстати, вы не в курсе как получить лейбл xbox live для своей игры?
                      +1
                      Написать на wpgames@microsoft.com, при этом писать просто так вообще нет смысла, желательно описание конкретного проекта, они пишут что очень любят бета версии) Правда на create.msdn.com пишут, что не всем даже отвечают.

                    Only users with full accounts can post comments. Log in, please.