天天看點

如何将OpenXLive添加到WP7 Silverlight遊戲中

OpenXLive beta版釋出已經有一個半月的時間了,得到了開發者和玩家的好評,目前已經有五款OpenXLive遊戲進入Windows Phone Marketplace,其中的7bomb和Super Hoops都取得了非常驕人的成績。

當OpenXLive在XNA遊戲中大展身手的同時,我們也聽到了一些來自Silverlight程式員的抱怨。在Windows Phone 7中雖然提供了XNA的遊戲開發平台,但相當一部分的遊戲是采用Silverlight開發的。畢竟對于顯示性能不高的遊戲來說,Silverlight是一個頗具魅力的快速開發工具。

幸好,我們在最初的架構設計上考慮了未來支援Silverlight的可能性,是以将業務邏輯部分封裝到了OpenXLive.dll中,而将XNA上的XLiveForm窗體和控件庫封裝到了OpenXLive.Forms.dll中。我們隻需要在Silverlight中調用OpenXLive中的功能即可。

在提供了一個OpenXLive on Silverlight的簡單示例代碼後,我們發現對Silverlight遊戲的支援仍舊不夠。首先,我們隻提供了Leaderboard部分的示例代碼,在缺乏文檔的情況下,開發其他功能的UI是很困難的;其次,開發者并不希望自己動手寫一個Silverlight UI,而隻是想簡單地在遊戲中加入OpenXLive的支援,就像在XNA遊戲中那樣。

是以,我們重新定義了OpenXLive Silverlight的功能,實作了OpenXLive中的所有功能,并将其封裝到了OpenXLive.Silverlight.dll中。在開發過程中,我們盡力保持XNA和Silverlight架構的一緻性,如果您使用過OpenXLive XNA版本,在Silverlight版本中,您會有一種似曾相識的感覺,這正是我們所希望的。

需要提示的一點是,OpenXLive的Silverlight和XNA版本共同使用了一個邏輯程式集——OpenXLive.dll,是以他們在功能上是一緻的。

未來,我們會将OpenXLive Silverlight加入到OpenXLive SDK中,并提供Visual Studio模闆。在某一個時間點上,我們會考慮對OpenXLive Silverlight進行開源,讓開發者能夠友善的将OpenXLive Silverlight修改成自己想要的樣子。

OpenXLive簡介

微軟為Windows Phone 7上的XNA和Silverlight遊戲開發提供了非常好的開發工具和應用程式架構,使得開發者可以更加容易地開發出生動有趣的遊戲來。但是随着開發的深入,我們發現,雖然我們開發的遊戲品質可以和大公司的産品相媲美,但比起大公司遊戲的使用者體驗還是相差很多。因為,我們必須将很多時間用于周邊功能的開發,比如:啟動界面(Splash Screen), 積分榜(Leaderboard)和遊戲成就(Achievement)等,更不要奢談為遊戲加入SNS功能,比如:檢視線上使用者(Online Player)、雲存儲(Cloud Storage)等線上功能了。這些周邊功能的開發時間,可能要超過遊戲本身的開發時間,那我們該怎麼辦呢?

OpenXLive正在想辦法幫助個人開發者和小團隊開發者,使他們在最短的時間内擁有以上這些隻有大公司才可能擁有的遊戲功能。

如何将OpenXLive添加到WP7 Silverlight遊戲中

OpenXLive是一種為Windows Phone 7智能手機遊戲開發者提供的雲端線上服務。支援開發者為單機遊戲增加雲端和SNS功能,幫助開發者以最小的工作量将雲端服務內建到自己的遊戲中。這些雲端服務包括:積分榜、遊戲成就、線上對戰、Social Network和雲端存儲等功能。與Open XLive類似的服務,還有iOS上的OpenFeint。

OpenXLive目前支援Windows Phone的XNA與Silverlight開發架構,不需要開發者編寫UI代碼,即可在遊戲中友善地調用OpenXLive的界面及功能。由于XNA和Silverlight是兩個不同的應用程式架構,是以,OpenXLive提供了不同的引用方式來支援XNA和Silverlight遊戲。

本文讨論的是如何将OpenXLive加入到Silverlight遊戲中,如果您的遊戲采用XNA編寫,請檢視《OpenXLive開發入門》,連結如下:

http://wiki.openxlive.net/Getting-Started-with-Open-XLive.ashx

添加引用

您可以在下面的連結中下載下傳單獨的OpenXLive Silverlight SDK:

http://resource.openxlive.com/resource/Download/ad686043-d477-4d5a-bc83-f27520a3d600

首先,我們假設您已經有了基于Silverlight開發的Windows Phone遊戲。如果您想從頭建立一個OpenXLive Silverlight遊戲,您可以參考下一節《OpenXLive Silverlight向導使用》。

我們采用的示例工程OpenXLiveGameSilverlight,您可以在OpenXLive的資源網站中找到。

首先,我們在OpenXLive SDK的bin檔案夾下找到OpenXLive.dll和OpenXLive.Silverlight.dll,将其拷貝到工程所在的目錄中。

然後,在Visual Studio 2010中,打開OpenXLiveGameSilverlight工程,在Solution Explorer中找到References節點,右鍵單擊啊,選擇Add References,在對話框中選擇Browse頁面,找到工程目錄下的OpenXLive.dll和OpenXLive.Silverlight.dll,将兩個程式集的引用加入到工程中。

添加成功後,如下圖所示:

如何将OpenXLive添加到WP7 Silverlight遊戲中

修改初始頁面

在引用添加完成之後,我們還要修改WMAppMainifest.xml檔案,使Silverlight遊戲啟動時,啟動OpenXLive.Silverlight中所包含的Startup頁面。

在工程的Propertes節點下找到WMAppMainifest.xml檔案,輕按兩下打開,如下圖所示:

如何将OpenXLive添加到WP7 Silverlight遊戲中

WMAppMainifest.xml檔案的結構如下:

xml version="1.0" encoding="utf-8"?>

<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.0">
  <App xmlns="" ProductID="{3cf35939-f7f6-4808-969c-22d520f6a526}" Title="OpenXLiveGameSilverlight" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal"  Author="OpenXLiveGameSilverlight author" Description="Sample description" Publisher="OpenXLiveGameSilverlight">
    <IconPath IsRelative="true" IsResource="false">ApplicationIcon.png
    IconPath>
    <Capabilities>
      <Capability Name="ID_CAP_GAMERSERVICES"/>
    
     Capabilities>
    <Tasks>
      <DefaultTask  Name ="_default" NavigationPage="OpenXLive.Silverlight;component/Forms/StartupPage.xaml"/>
    
      Tasks>
    <Tokens>
      <PrimaryToken TokenID="OpenXLiveGameSilverlightToken" TaskName="_default">
        <TemplateType5>
          <BackgroundImageURI IsRelative="true" IsResource="false">Background.png
       BackgroundImageURI> <Count>0
        Count> <Title>OpenXLiveGameSilverlight
         Title> 
          TemplateType5> 
           PrimaryToken> 
            Tokens> 
             App> 
              Deployment>
           

在WMAppMainifest.xml檔案中找到

DefaultTask

節點,并将其中的NavigationPage改為”OpenXLive.Silverlight;component/Forms/StartupPage.xaml”。這樣能保證Silverlight遊戲啟動之後,會首先啟動OpenXLive的Startup頁面。

接下來,我們還要完成對XLiveSLFormManager對象的初始化工作。打開工程中的App.xaml.cs檔案,首先在檔案頂部加入對OpenXLive.Silverlight的引用:

using OpenXLive.Silverlight;
           

然後,在App類中找到

Application_Launching

方法,加入XLiveSLFormManager對象的建立操作:

// Code to execute when the application is launching (eg, from Start)
        // This code will not execute when the application is reactivated
        private void Application_Launching(object sender, LaunchingEventArgs e)
        {
            XLiveSLFormManager manager = new XLiveSLFormManager(this, "xxxxxxxxxxxxxxxx");
        }
           

其中,第一個參數為App執行個體的引用,第二個參數為SecretKey,該Key是在OpenXLive網站上建立遊戲時,由系統生成的,作為OpenXLive系統識别遊戲的唯一辨別符,請保證這個SecretKey的安全,以防止其他遊戲進行仿冒。

更多詳細情況,請檢視《在開發者網站上建立OpenXLive遊戲》,連結如下:

http://wiki.openxlive.net/Tutorial-4-Create-OpenXLive-Game-in-website.ashx

當然,我們也可以在App類中建立一個static的FormManager屬性,用于在程式的其他地方調用XLiveSLFormManager對象,但這一步不是必須的,代碼如下:

public static XLiveSLFormManager FromManager { get; internal set; }

        // Code to execute when the application is launching (eg, from Start)
        // This code will not execute when the application is reactivated
        private void Application_Launching(object sender, LaunchingEventArgs e)
        {
            FromManager = new XLiveSLFormManager(this, "xxxxxxxxxxxxxxxxxx");
        }
           

我們運作程式,能夠看到下面的界面,是不是有一種似曾相識的感覺?點選Game Center和Leaderboards,我們可以進入相關的界面:

如何将OpenXLive添加到WP7 Silverlight遊戲中
如何将OpenXLive添加到WP7 Silverlight遊戲中
如何将OpenXLive添加到WP7 Silverlight遊戲中

目前OpenXLive Silverlight隻支援豎屏(Portrait)顯示,未來我們會加入對于橫屏(Landscape)的支援。另外,除了Startup界面之外,其他OpenXLive界面都是黑色背景,這樣做主要是為了節省系統資源。

添加背景和事件處理

接下來,為了美化啟動界面,我們要加入背景圖檔。添加背景圖檔的操作非常簡單:在Solution Explorer中,選擇Project節點,右鍵單擊,選擇Add – Existing Item,在選擇一副PNG或JPG的圖檔,尺寸最好是800x480,這樣能夠有效保證圖檔不變形。

另外請确認一下,我們加入的圖檔Build Action為Resource,且Copy to Output Directory選擇“Do not copy”。

然後,回到App.xaml.cs檔案的Application_Launching方法中:

// Code to execute when the application is launching (eg, from Start)
        // This code will not execute when the application is reactivated
        private void Application_Launching(object sender, LaunchingEventArgs e)
        {
            FromManager = new XLiveSLFormManager(this, "xxxxxxxxxxxxxxxxxxx");
            StartupPage.BackgroundPath = "/OpenXLiveGameSilverlight;component/OpenXLive.Portrait.png";
        }
           

我們要為StartupPage添加BackgroundPath,示例代碼的寫法是針對遊戲本身的資源,也可以指定一個來自Web的連結,不過出于顯示效果的考慮,建議您不要這麼做。OpenXLiveGameSilverlight,是資源所在程式集的名稱;component/OpenXLive.Portrait.png,是資源的引用路徑,如果資源包含在一個檔案夾中,寫法應該是component/MyFolder/OpenXLive.Portrait.png。

最後提醒,請大家千萬不要忘記字元串前面的“/”,沒有這個符号,程式将抛出異常。

接下來,我們要加入Startup頁面的事件處理函數,當使用者點選某一個按鈕時,會觸發一個事件操作。我們在下面增加了其中兩個按鈕的事件處理方法:

public static XLiveSLFormManager FromManager { get; internal set; }

        // Code to execute when the application is launching (eg, from Start)
        // This code will not execute when the application is reactivated
        private void Application_Launching(object sender, LaunchingEventArgs e)
        {
            FromManager = new XLiveSLFormManager(this, "xxxxxxxxxxxxxxxxxx");
            StartupPage.BackgroundPath = "/OpenXLiveGameSilverlight;component/OpenXLive.Portrait.png";
            StartupPage.NewGameButtonClick += new EventHandler(StartupPage_NewGameButtonClick);
            StartupPage.AboutButtonClick += new EventHandler(StartupPage_AboutButtonClick);
        }

        void StartupPage_AboutButtonClick(object sender, EventArgs e)
        {
            MessageBox.Show("OpenXLive Silverlight Demo 1.0");
        }

        void StartupPage_NewGameButtonClick(object sender, EventArgs e)
        {
            this.RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
        }
           

AboutButtonClick的處理函數非常簡單,隻是調用了Message來顯示遊戲的版本資訊。而NewGameButtonClick則是為了調用開發人員自己編寫的Silverlight遊戲界面,這個界面應該存在于Silverlight遊戲的程式集中。

如何将OpenXLive添加到WP7 Silverlight遊戲中

最後,我們得到的Silverlight啟動界面就是上圖這樣。我們在Silverlight的界面中,沒有增加Exit選項,因為Silverlight界面預設不支援退出操作,隻能通過按Back鍵來退出程式。

使用Wizard建立新遊戲

接下來,我們要介紹如何使用Visual Studio 2010的Template來建立一個OpenXLive Silverlight遊戲。OpenXLive Silverlight的模闆會包括在OpenXLive SDK中,如果您安裝了OpenXLive SDK,就可以在Visual Studio 2010中建立基于Silverlight的遊戲了。

首先,打開Visual Studio 2010,在File菜單中選擇New-Project,在New Project對話框中,選擇Visual C#下的Silverlight for Windows Phone中的OpenXLive Silverlight節點,然後選擇建立OpenXLiveSilverlightGame。

如何将OpenXLive添加到WP7 Silverlight遊戲中

OpenXLiveSilverlightGame工程建立完畢後,如果直接編譯,會得到下列的錯誤提示:

如何将OpenXLive添加到WP7 Silverlight遊戲中

這個錯誤是為了提醒開發者,要在OpenXLive開發者網站上建立自己的遊戲,擷取遊戲對應的Secret Key,才能夠正常使用OpenXLive的線上功能。

擷取Secret Key的方法,請參考《在開發者網站上建立OpenXLive遊戲》,連結如下:

http://wiki.openxlive.net/Tutorial-4-Create-OpenXLive-Game-in-website.ashx

打開App.xaml.cs檔案,找到下面的代碼:

public static XLiveSLFormManager FromManager { get; internal set; }

#error Please full your game Secret Key in below code
private string APISecretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";

// Code to execute when the application is launching (eg, from Start)
// This code will not execute when the application is reactivated
private void Application_Launching(object sender, LaunchingEventArgs e)
{
    FromManager = new XLiveSLFormManager(this, APISecretKey);
    StartupPage.BackgroundPath = "/OpenXLiveSilverlightGame2;component/OpenXLive.Portrait.png";
    StartupPage.NewGameButtonClick += new EventHandler(StartupPage_NewGameButtonClick);
    StartupPage.AboutButtonClick += new EventHandler(StartupPage_AboutButtonClick);
}
           

開發者将Secret Key加入到高亮顯示部分,并且注釋掉#error代碼,我們的工程就可以正常編譯了。

我們也可以修改New Game Button的事件處理函數,來決定調用哪個Silverlight窗體。

void StartupPage_NewGameButtonClick(object sender, EventArgs e)
{
    this.RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
}
           

到這裡,我們就介紹完了如何通過Visual Studio 2010向導來建立OpenXLive Silverlight遊戲的方法。

寫在最後

我們用幾乎與XNA版本相同的順序,叙述了如何将OpenXLive Silverlight加入到Windows Phone Silverlight的遊戲中去。接下來,我們會介紹,如何送出成績、送出成就,考慮到Silverlight的界面程式設計更加容易,我們并不會提供一個标準的成績送出界面,該界面隻會以示例代碼的形式出現。

http://wiki.openxlive.net/OpenXLive-Silverlight.ashx

引用

OpenXLive官方網站

http://www.openxlive.net/

OpenXLive開發者網站

http://developer.openxlive.net/

OpenXLive開發入門

http://wiki.openxlive.net/Getting-Started-with-Open-XLive.ashx

繼續閱讀