Для первой нашей игры я решил выбрать давно забытую электронную игру «Ну, погоди!». Эта игра очень простая для написания, но нам это и надо, чтобы понять основные принципы создания игр для 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.
Вот что должно получиться: