2012-03-07 152 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的東西)