Рейтинг
+1.17
голосов:
1
avatar

Разработка игр для Windows Phone 7  

Начинаем писать игру "Ну, погоди!"

Для первой нашей игры я решил выбрать давно забытую электронную игру «Ну, погоди!». Эта игра очень простая для написания, но нам это и надо, чтобы понять основные принципы создания игр для Windows Phone 7.

Так как художник из меня никакой, прошу сильно меня не пинать за мои изображения. А изображения нам понадобятся следующие, для начала нам нужен волк.

Волк из "Ну, погоди!"

Так как волк должен изменять свое положение в пространстве, а именно поднимать и опускать корзину для ловли яиц, я сделал зеркальные отображения волка и вот что получилось:

Волк из "Ну, погоди!"

Волк из "Ну, погоди!"

Волк из "Ну, погоди!"

И так, у нас получилось 4 изображения волка (я уверен у Вас волк получиться намного лучше моего!), теперь нам надо волка поместить в наш телефон.

Открываем наш проект, подготовленные ранее. В «Solution Explorer» щелкаем правой кнопкой мыши на WindowsPhoneGame1Content. Вибираем «Add» -> «Existing Item» и выбираем наши 4 изображения с волком, жмем «Ok». В «Solution Explorer» появятся файла с изображением волка.

Теперь нам надо создать 2D текстуру для каждого изображения волка + еще одно для хранения текущего положения волка. Для этого в начале класса Game1 помещаем следующий код:

public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        Texture2D volf_dl; // волк внизу слева
        Texture2D volf_ul; // волк вверху слева
        Texture2D volf_dr; // волк внизу справа
        Texture2D volf_ur; // волк вверху справа
        Texture2D volf;

Тепер нам надо загрузить наши изображения в созданные нами текстуры. Как я говорил в прошлом посте для загрузки любого контента игры нам необходимо использовать функцию
LoadContent()
. Размещаем загрузку изображений в текстуры:

protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            volf_dl = Content.Load<Texture2D>("wolf");
            volf_ul = Content.Load<Texture2D>("wolf_ul");
            volf_dr = Content.Load<Texture2D>("wolf_dr");
            volf_ur = Content.Load<Texture2D>("wolf_ur");
            volf = volf_dl; 
            // TODO: use this.Content to load your game content here
        }

Для каждой текстуры мы вызываем метод Load и загружаем в него изображения, указывая что тип должен быть Texture2D. Параметр «wolf» или «wolf_ul» это названия Ваших файлов с изображениями.



В переменной volf я храню состояние волка в начале игры. По умолчание корзина волка находится внизу слева.

Перейдем к рисованию волка. Для этого служит функция
Draw()
.

protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.White);
            // TODO: Add your drawing code here
            spriteBatch.Begin();
            spriteBatch.Draw(volf, volf_pos, Color.White);
            spriteBatch.End();

            base.Draw(gameTime);
        }


Функция рисует текстуру волка volf, которая будет постоянно меняться в функции
Update() 
в зависимости от действий играющего. Также мы указали параметр volf_pos, который хранит в себе положение волка на экране. Объявим эту переменную в начале класса Game1:

public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        Texture2D volf_dl; // волк внизу слева
        Texture2D volf_ul; // волк вверху слева
        Texture2D volf_dr; // волк внизу справа
        Texture2D volf_ur; // волк вверху справа
        Texture2D volf;
        Vector2 volf_pos = new Vector2(400, 240);


Я указал координаты x и y-ка наугад, мы позже вернемся к экранным координат и разрешениям Windows Phone.

Теперь необходимо заставить волка реагировать на прикосновения к экрану телефона. Windows Phone 7 это MultiTouch Screen и должен поддерживать 4 одновременных прикосновения к экрану. Но для нашей игры достаточно одного прикосновения, указать часть экрана где падает яйцо в данный момент.

Обработку касаний экрана возложи на функцию
Update()
. Как я говорил выше, эта функция отвечает за изменение игрового состояния.

protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();
            var tc = TouchPanel.GetState();
            if (tc.Count > 0)
            {
                if ((tc[0].Position.X < 400) && (tc[0].Position.Y < 240)) { volf = volf_ul; }
                if ((tc[0].Position.X > 400) && (tc[0].Position.Y < 240)) { volf = volf_ur; }
                if ((tc[0].Position.X < 400) && (tc[0].Position.Y > 240)) { volf = volf_dl; }
                if ((tc[0].Position.X > 400) && (tc[0].Position.Y > 240)) { volf = volf_dr; }
            }

            // TODO: Add your update logic here

            base.Update(gameTime);
        }


Объявив переменную tc я передаю в нее состояние TouchPanel методом GetState().
tc.Count хранит количество одновременных касаний панели. Если он больше нуля, то прикосновение было. Получаем координаты x и y места где произошло касание. Делим экран на четыре части и проверяем в какой части произошло касание и в зависимости от этого меняем текстуру волка в переменно volf.

Теперь можно запустить приложение на эмуляторе Windwos Phone, который входит в состав Visual Studio 2010 Express for Windows Phone.

Вот что должно получиться:

Windows Phone эмулятор

Первое приложение Windows Phone Game

Итак, в предыдущем посте я рассказал какой инструментарий нам понадобится и где его взять для создания нашей первой игры для Windows Phone 7. Я надеюсь что скачивание и установка инструментария прошла успешно и мы можем идти дальше. Если у Вас возникли трудности в предыдущем посте задавайте свои вопросы в коментах к нему, я с удовольствием отвечу.

Итак, запускаем Visual Studio 2010 Express for Windows Phone.
Запуск Visual Studio 2010 Express for Windows Phone

Выбираем пункт меню «File» -> «New Project» -> «Windows Phone Game(4.0)»
Создаем первое приложение Windows Phone Game

После нажатия «Ok» студия создаст для нас заготовку нашей игры автоматически. Давайте немного остановимся на этом и рассмотрим что нам предложила студия.

Сначала рассмотрим «Solution Explorer».
Solution Explorer
«Solution Explorer» (Обозреватель решения) содержит все файлы решения, группирует их. В верхней части обозревателя появилось находится наше решение «WindowsPhoneGame1», а в нижней части мы видим «WindowsPhoneGame1Content». «WindowsPhoneGameContent» предназначен для размещения всех файлов ресурсов нашей игры, таких как графика, музыка и прочее. Разработчики вынесли его отдельно для того чтобы использовать одни и те еже файлы ресурсы игры для разных платформ. Дело в том, что XNA Framevork позволяет разрабатывать игра не только для Windows Phone, но и для персональных компьютеров и приставок XBox в одной среде разработки. И если сам код может меняться в зависимости от платформы, то игровой контент останется неизменным и может быть использован как для разработки игр для персонального компьютера, XBox или Windows Phone.

Теперь давайте рассмотрим заготовку кода, которую нам по умолчанию предлагает студия. Любое приложение Windows Phone Game состоит из трех основных частей:
LoadContent()
,
Update()
и
Draw()
. Если мы посмотрим на наш код, то мы обязательно их найдем. Рассмотрим функцию
LoadContent()


protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here
        }

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

Следующая обязательная функция
Update()


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

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

Следующая функция
Draw()


protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here

            base.Draw(gameTime);
        }


Эта функция отвечает за прорисовку нашей графики, именно она будет выводить наши изображения на экран, перерисовывать их при перемещении и т.п.

Далее когда мы перейдем к непосредственному созданию нашей игры Вы поймете для чего применяются данные функции.

В коде есть еще функции, но сними мы познакомится в процессе работы над нашей игрой.

собираем необходимый инструмент

Для разработки игр для Windows Phone 7 нам понадобится Microsoft Visual Studio 2010 Express, набор утилит для Phone 7, эмулятор Windows Phone 7, Framework 4, XNA. Все это можно абсолютно бесплатно скачать с официального сайта Microsoft. Ссылка тут. Microsoft Visual Studio 2010 Express предоставляется бесплатно на 30 дней, затем можно пройти регистрацию на сайте Microsoft  и Вам предоставят ключ для активации Вашей студии. Регистрация бесплатна. Советую скачать по вышеприведенной ссылке iso — образ Visual Studio 2010 и отдельно Windows Phone Developer Tools. После установки студии запустите установку Windows Phone Developer Tools, компьютер должен быть подключен к Интернет, так как установщик проверяет недостающие компоненты и загружает их из сети с последующей установкой. Объем загружаемых данных около 400Мб. Разработка игр для Windows Phone 7 в Visual Studio 2010 Express осуществляется на языке C#.