Использование XNA в Visual Studio 2012
В августе 2012 года вышла новая версия среды разработки Microsoft Visual Studio 2012, которая порадовала программистов новым стандартом С++11, а кого-то огорчила отсутствием С++\CLI для WinForms. Но речь сейчас не о новых возможностях или недостатках Visual Studio. Предоставив среду, Майкрософт еще не обеспечила совместимость с ней всех существующих инструментов. А конкретно, пока отсутствует новая версия XNA Game Studio. И интернет заполонили вопросы, что же делать желающим перейти на новую студию, и в то же время продолжить работать с XNA. Более-менее опытные разработчики вообще не заметили никаких проблем. Ведь для них XNA не более, чем набор библиотек, и в их использовании нет ничего необычного. В этой статье я продемонстрирую самый простой способ работы с XNA в новой Visual Studio 2012.
Для начала создадим обычный консольный проект:
Далее идем в зависимости проекта, находим там XNA библиотеки и подключаем их к нашей программе. Конечно же, эти библиотеки будут в списке только если на компьютере установлена XNA Game Studio.
Теперь приступаем к изменению кода. Заменяем весь код в Program.cs на следующий:
using System;
namespace XNA2012
{
class Program
{
static void Main(string[] args)
{
using (Game1 game = new Game1())
{
game.Run();
}
}
}
}
Создаем клас Game1 наследуя его от Microsoft.Xna.Framework.Game.
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.IO;
namespace XNA2012
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
// TODO: Add your initialization logic here
base.Initialize();
}
protected override void LoadContent()
{
// TODO: use this.Content to load your game content here
}
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}
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);
}
}
}
Весь этот код является стандартным. Запуск его приводит к появлению типичного для XNA приложений окна.
Избавится от появляющегося консольного окна просто, достаточно в настройках сменить тип приложения с Console на Windows Application.
Чтобы окно не было таким унылым, можно что-нибудь нарисовать. Грузим текстуру:
tex = Texture2D.FromStream(GraphicsDevice, new FileStream("star.png", FileMode.Open));
И отображаем ее в батче:
spriteBatch.Begin(SpriteSortMode.Texture, BlendState.AlphaBlend);
spriteBatch.Draw(tex, new Rectangle(10, 10, 64, 64), Color.White);
spriteBatch.End();
Конечно, многие привыкли использовать текстуры с помощью конвеера контента – специально проекта, автоматически грузящего и конвертирующего ресурсы в промежуточный формат. Создать такой проект вручную довольно затруднительно.
|