Программируем игры на XNA и MonoGame для Windows 8.

С выходом новой версии MonoGame 3.0.1 информация из статьи могла устареть. Смотрите новые статьи в постах выше.

Пришло время начать осваивать MonoGame для того, чтобы портировать старые и писать новые игры для Windows 8, а потом и для других поддерживаемых платформ.

В двух словах, MonoGame – это кроссплатформенная реализация XNA Framework, которая сейчас поддерживает такие платформы как iOS, Android и Windows (в том числе и 8 версию).

В рамках следующих нескольких статей мы вместе будем разбираться с MonoGame и чуть позже попробуем портировать какую-нибудь игру с Windows Phone на Windows 8.

Итак, начнем. Первое, что я хочу сделать – это создать пустой проект, чтобы убедиться в том, что MonoGame вообще работает.

Сначала нужно скачать последнюю версию исходного кода проекта из репозитория

https://github.com/mono/MonoGame

Это можно сделать через git (что более правильно) либо просто «в лоб» по следующей ссылке

https://github.com/mono/MonoGame/zipball/develop3d

Распаковываем куда-нибудь исходный код проекта и находим папку ProjectTemplates\VS2012\MonoGame 3\Game

Нам нужно заархивировать все ее содержимое при помощи zip и положить полученный файл в папку с шаблонами проектов для Visual Studio 2012.

C:\Users\Имя пользователя\Documents\Visual Studio 2012\Templates\ProjectTemplates\Visual C#

Теперь попробуем создать новый проект из шаблона (у нас должен появиться новый шаблон MonoGame Game).

У нас должен получиться проект со следующим содержимым

Файл Program.cs содержит код, запускающий приложение:

using System;

namespace Game2

{

    /// <summary>

    /// The main class.

    /// </summary>

    public static class Program

    {

        /// <summary>

        /// The main entry point for the application.

        /// </summary>

        static void Main()

        {

            var factory = new MonoGame.Framework.GameFrameworkViewSource<Game1>();

            Windows.ApplicationModel.Core.CoreApplication.Run(factory);

        }

    }

}


Файл Game1.cs содержит привычный нам класс игры (с несколькими небольшими изменениями).

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Graphics;

namespace Game2

{

    /// <summary>

    /// This is the main type for your game

    /// </summary>

    public class Game1 : Game

    {

        GraphicsDeviceManager _graphics;

        SpriteBatch _spriteBatch;

        public Game1()

        {

            _graphics = new GraphicsDeviceManager(this);

            Content.RootDirectory = «Content»;

        }

        /// <summary>

        /// Allows the game to perform any initialization it needs to before starting to run.

        /// This is where it can query for any required services and load any non-graphic

        /// related content.  Calling base.Initialize will enumerate through any components

        /// and initialize them as well.

        /// </summary>

        protected override void Initialize()

        {

            // TODO: Add your initialization logic here

            base.Initialize();

        }

        /// <summary>

        /// LoadContent will be called once per game and is the place to load

        /// all of your content.

        /// </summary>

        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

        }

        /// <summary>

        /// UnloadContent will be called once per game and is the place to unload

        /// all content.

        /// </summary>

        protected override void UnloadContent()

        {

            // TODO: Unload any non ContentManager content here

        }

        /// <summary>

        /// Allows the game to run logic such as updating the world,

        /// checking for collisions, gathering input, and playing audio.

        /// </summary>

        /// <param name=»gameTime»>Provides a snapshot of timing values.</param>

        protected override void Update(GameTime gameTime)

        {

            // TODO: Add your update logic here

            base.Update(gameTime);

        }

        /// <summary>

        /// This is called when the game should draw itself.

        /// </summary>

        /// <param name=»gameTime»>Provides a snapshot of timing values.</param>

        protected override void Draw(GameTime gameTime)

        {

            GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here

            base.Draw(gameTime);

        }

    }

}

Пока что проект не запустится. Остался последний этап – скомпилировать MonoGame и добавить сборку к проекту.

Найдем в папке с исходным кодом MonoGame проект MonoGame.Framework.Windows8.csproj

Открываем его в Visual Studio и обнаруживаем, что не подключены библиотеки SharpDx.

Скачать их можно через NuGet или с сайта SharpDX

http://code.google.com/p/sharpdx/

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

Теперь проект должен скомпилироваться и мы увидим знакомый нам экран цвета CornFlowerBlue.

И небольшая пошаговая инструкция по установке:

  1. Скачать исходный код MonoGamehttps://github.com/mono/MonoGameили по прямой ссылкеhttps://github.com/mono/MonoGame/zipball/develop3d
  2. Архивируем содержимое папки ProjectTemplates\VS2012\MonoGame 3\Game
  3. Копируем полученный zip архив в папку C:\Users\Имя пользователя\Documents\Visual Studio 2012\Templates\ProjectTemplates\Visual C#
  4. Находим проект MonoGame.Framework.Windows8.csproj и открываем его в Visual Studio
  5. Обновляем в проекте ссылки на SharpDX через NuGet или скачиваем SharpDX (http://code.google.com/p/sharpdx/) и обновляем ссылки
  6. Создаем новый проект из шаблона MonoGame Game
  7. Подключаем к проекту ссылку на MonoGame.Framework
  8. Компилируем и запускаем проект
Реклама
Запись опубликована в рубрике Компьютерная графика с метками , , , , , , . Добавьте в закладки постоянную ссылку.

10 комментариев на «Программируем игры на XNA и MonoGame для Windows 8.»

  1. Artiom:

    Иван, спасибо за статью.

  2. ShtopoR:

    Иван, спасибо за урок.

    Но не понятно как выполнять пятый(5) и седьмой(7) шаг.

  3. ShtopoR:

    Все получилось. Спасибо большое.

  4. topoR:

    В Monogame нужно работать только под восьмеркой с VS2012?
    Или можно под семеркой с 2010 студией?
    Создаться ли необходимый манифест в 10ой студии?

    • Вообще с monogame можно работать почти в чем угодно(более подробно можно посмотреть на их сайте). Но лично я пока использую его для написания Windows 8 приложений, а это можно делать только в VS 2012 в Windows 8.

  5. topoR:

    +Спасибо за статью

  6. Здравствуйте, пытаюсь поставить monogame на VS2012 express. Поставил ок, базовый пакет запускается и показывает CornflowerBlue экран. Но при импорте любой текстуры, и попытке вывести на экран,

    _spriteBatch.Begin();
    _spriteBatch.Draw(firstTex, new Vector2(10f, 10f), Color.White);

    компилятор ругается на

    Необработанное исключение типа «System.IO.FileNotFoundException» в MonoGame.Framework.Windows8.DLL

    Дополнительные сведения: Невозможно загрузить файл или сборку «SharpDX.DXGI, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null» или один из зависимых от них компонентов. Не удается найти указанный файл.

    После этого я попробовал обновить SharpDX через нугет, и нугет не может скачать ни одного обновления, ругается на

    «SharpDX 2.4.2» успешно установлен.
    «SharpDX 2.4.2» успешно удален.
    Не удалось выполнить установку. Идет откат…
    Не удалось установить пакет «SharpDX 2.4.2». Вы пытаетесь установить этот пакет в проект, требуемая версия платформы которого — «.NETCore,Version=v4.5», но в пакете нет объектов нужного типа (ссылки на сборки), совместимых с этой платформой.

    Буду признателен, если поможете победить VS 🙂

  7. SharpDx.DXGI как оказалось нужно было просто линкануть из папки, зато теперь он требует SharpDX.DXGL и SharpDX.Input, которых вообще нет ни в архиве SharpDX с сайта, ни в папке monogame. Что делать хз, при попытке импорта SharpDX.DXGL через nuget, выдаёт ту же ошибку что написал выше.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s