Разработка кроссплатформенной библиотеки XNA - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь разработать кроссплатформенное приложение. В настоящее время я настроил следующие решения с указанным для их платформы шаблоном:

  • GameBase
  • Windows
  • Xbox
  • WindowsPhone

Windows, Xbox и WindowsPhone используют GameBase в качестве справочного материала, но я хочу разделить различный код для каждой платформы, используемой в библиотеке GameBase, как показано ниже:


    #if WINDOWS

    graphics.PreferredBackBufferWidth = 640;
    graphics.PreferredBackBufferHeight = 480;
    graphics.ApplyChanges();

    #elif WINDOWS_PHONE

    TargetElapsedTime = TimeSpan.FromTicks(333333);
    InactiveSleepTime = TimeSpan.FromSeconds(1);

    #endif

Это не работает, и я вижу, что в Configuration Manager платформой GameBase является Any CPU, поэтому мне интересно, имеет ли это какое-либо отношение к тому, что GameBase является библиотекой классов?

Если это так, как мне это исправить, и, если возможно, я бы хотел сохранить теги #if.

Настройка каталога | Windows Solution Game.cs | Обозреватель решений Directory setup | Windows Solution Game.cs | Solution Explorer

Ответы [ 3 ]

3 голосов
/ 07 марта 2012

Вы должны создать отдельные проекты Visual Studio для разных платформ.Вы можете повторно использовать код в нескольких проектах, добавив исходный код, используя Добавить как ссылку .В общем исходном файле, который связан с несколькими проектами, вы можете использовать #if и т. Д. Для разделения кода, специфичного для платформы.

Add As Link screenshot

Как «Не работает» неясноот вашего вопроса, но в целом вы не можете построить сборку (например, библиотеку классов) для Windows, а затем использовать ее на XBox и Windows Phone.

1 голос
/ 07 марта 2012

Совместное использование проектов между различными типами проектов является сложной задачей - просто из-за того, как используются типы проектов Visual Studio, и потому что разные типы проектов действительно должны ссылаться на разные версии каркаса dot net.

Есть несколько вещей, которые могут помочь:

Надеюсь, это немного поможет.Лично я в настоящее время в основном использую ручное вырезание и вставку и надеюсь, что следующая версия Portable Class Library поможет (это связано с Win8 Metro)

0 голосов
/ 07 марта 2012

Не уверен, что это ваша единственная проблема, но вы ошиблись WINDOWS_PHONE:

WINDOWS_HPONE

должно быть:

WINDOWS_PHONE

ОБНОВЛЕНИЕ:

Способ, которым я бысделать это, я бы создал решение библиотеки классов, назвав его что-то вроде GameBaseLibrary.Затем создайте там проект под названием GameBase и добавьте туда весь код, которым вы хотели бы поделиться на всех платформах.(Физика IE, доступ к данным и т. Д.)

Затем в том же решении добавьте XboxBaseLibrary, WindowsBaseLibrary, WindowsPhoneBaseLibrary и добавьте код, специфичный для каждой платформы, добавьте ссылку в каждом из этих проектов в GameBaseПроект для использования кода оттуда в каждом из трех других проектов.

Затем создайте 3 различных типа решений - Xbox, Window, Windows Phone и добавьте скомпилированные библиотеки из GameBaseLibrary в качестве ссылки в каждый из них, чтобы иметь возможностьиспользовать код.Поскольку вы работаете с каждой версией кода (xbox, windows, windows phone), обратите внимание на код, который вы вводите, чтобы убедиться, что это не то, что может жить в классе GameBase, потому что вы не хотите продолжать переписыватьтот же код.

Таким образом, большая часть кода находится в GameBaseLibrary, а код платформы - в каждом из 3 других проектов.

Надеюсь, это понятно.

...