2012-03-07 199 views
0

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

  • 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 

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

如果是这样,我该如何解决它,如果可能我想保留#if标签。

目录设置| Windows解决方案Game.cs |解决方案资源管理器 Directory setup | Windows Solution Game.cs | Solution Explorer

+0

大多数App Hub示例都具有这三种版本。 [看看他们是如何做到的](http://create.msdn.com/en-US/education/catalog/sample/simple_animation)。他们只有每个源文件的一个版本;他们只是每个目标都有一个不同的项目,都在同一个根文件夹中(这样就不需要链接)。 – 2012-03-08 13:33:24

回答

3

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

Add As Link screenshot

如何“它不工作”是不是从你的问题清楚,但一般不能用于Windows建立一个组件(例如类库),然后用它在Xbox和Windows Phone。不同项目类型之间

+0

我有4个独立的Visual Studio项目,其中1个是共享的(类库),另外3个是针对不同平台的。 我在类库中使用了#if,它不起作用。我希望所有代码都能写入类库中,并在其他项目中共享,而不必编辑em。 – Basic 2012-03-07 15:47:04

+0

通过使用添加为链接,我需要添加GameBase中的所有文件作为指向3个平台特定解决方案的链接?之后#if标签应该工作? – Basic 2012-03-07 16:01:08

+0

@Basic:是的,你不能在不同的平台上重复使用一个类库项目(当然,有时你可以,但我不认为XBox和Windows Phone是混合的)。但是,您可以通过使用“添加为链接”重新使用文件。 – 2012-03-07 16:10:47

0

不知道这是你唯一的问题,但你拼写错误WINDOWS_PHONE:

WINDOWS_HPONE 

应该是:

WINDOWS_PHONE 

UPDATE:

,我会做的方式这是我会创建一个类库的解决方案,称它像GameBaseLibrary。然后在那里创建一个名为GameBase的项目,并在其中添加您希望在所有平台上共享的所有代码。 (IE物理,数据访问等)

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

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

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

我希望这是显而易见的。

+0

这只是从我的例子:)目前我在#WINDOWS标签进行测试,它不会在里面运行任何东西。 – Basic 2012-03-07 15:35:47

+0

对不起,但您将不得不提供一些关于确切问题和您的整体项目设置的更多清晰度。目前还不清楚GameBase是Visual Studio中的类还是类库项目。 – evasilchenko 2012-03-07 15:40:53

+0

GameBase是一个类库项目,看看我上传的图片:) – Basic 2012-03-07 15:56:49

1

共享项目是做一件棘手的事情 - 只是因为Visual Studio项目类型的使用方法,并因为不同的项目类型确实需要引用不同版本的点网框架。

有可以帮助几件事情:

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