开发跨平台XNA库

时间:2012-03-07 15:30:57

标签: c# windows windows-phone-7 xna xbox

我正在尝试开发跨平台应用程序。 目前我已经设置了以下解决方案,其平台指定了模板:

  • GameBase
  • 的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

它不起作用,我可以看到在配置管理器中,GameBase的平台是任何CPU,所以我想知道它是否有任何应对GameBase是一个类库?

如果是,我如何解决它,如果可能的话,我想保留#if标签。

目录设置| Windows解决方案Game.cs | Solution Explorer Directory setup | Windows Solution Game.cs | Solution Explorer

3 个答案:

答案 0 :(得分:3)

您必须为不同的平台创建单独的Visual Studio项目。您可以使用添加为链接添加源,从而在多个项目中重复使用代码。在链接到多个项目的共享源文件中,您可以使用#if等来分隔特定于平台的代码。

Add As Link screenshot

你的问题并不清楚“它不起作用”,但一般来说你不能为Windows构建一个程序集(例如类库),然后在XBox和Windows Phone上使用它。

答案 1 :(得分:1)

在不同项目类型之间共享项目是一项棘手的事情 - 仅仅因为使用了Visual Studio项目类型的方式,并且因为不同的项目类型实际上需要引用不同版本的dot net框架。

有一些事情可以提供帮助:

希望有所帮助。就个人而言,我目前主要使用手动剪切和粘贴,并希望下一版本的便携式类库有所帮助(它应该归功于Win8 Metro的东西)

答案 2 :(得分:0)

不确定这是否是您唯一的问题,但是您错误地打动了WINDOWS_PHONE:

WINDOWS_HPONE

应该是:

WINDOWS_PHONE

更新:

我这样做的方法是创建一个类库解决方案,调用类似GameBaseLibrary的方法。然后创建一个名为GameBase的项目,并在其中添加您想要在所有平台上共享的所有代码。 (I.E.物理,数据访问等......)

然后在同一个解决方案中添加XboxBaseLibrary,WindowsBaseLibrary,WindowsPhoneBaseLibrary并添加特定于每个平台的代码,将每个项目中的引用添加到GameBase项目中,以便在其他三个项目中使用其中的代码。 / p>

然后创建3种不同的解决方案类型--Xbox,Window,Windows Phone,并将GameBaseLibrary中编译的dll作为参考添加到其中,以便能够使用代码。当你正在处理每个版本的代码(xbox,windows,windows phone)时,要注意你输入的代码,以确保它不是可以存在于GameBase类中的东西,因为你不想继续重写相同的代码。

这样,大部分代码都位于GameBaseLibrary中,平台特定代码位于其他3个项目中。

我希望这很清楚。