日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

马宁的Windows Phone 7开发教程(3)——XNA下使用MessageBox和软键盘

發布時間:2025/3/21 windows 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 马宁的Windows Phone 7开发教程(3)——XNA下使用MessageBox和软键盘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:馬寧

相信未來一段的業余時間,我都要和XNA為伍了。本來想向3D開發的縱深發展,但是遇到了一個實際的問題,就是如何在XNA下顯示MessageBox和Software Input Panel。干脆先寫出來吧,省得大家遇到這問題時抓狂。

按照為數不多的公開文檔描述,XNA和Silverlight for Windows Phone應該是基于同一個.NET Compact Framework的CLR。但是,XNA并沒有提供任何用戶控件、MessageBox和軟鍵盤等,也不能直接調用Silverlight for Windows Phone的類庫。這樣勢必為XNA制造了很多人為的障礙。但調用MessageBox和Software Input Panel的后門,XNA還是給我們留下了,這就是Microsoft.Xna.Framework.GamerServices命名空間下的Guide類,類描述如下:

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.gamerservices.guide.aspx

該類不但可以調用MessageBox和軟鍵盤,還能夠調用Marketplace、XBox Live等窗體。不過,值得注意的是,Guide類提供的方法都是異步調用,而非同步調用,這也好理解,游戲的處理過程是以時間驅動的,所以任何操作不應該阻塞住游戲主線程。

Guide類調用MessageBox和軟鍵盤的描述在這里:

http://msdn.microsoft.com/en-us/library/ff827869.aspx

http://msdn.microsoft.com/en-us/library/ff827868.aspx

但MSDN文檔還是有一些瑕疵,按上面提供的方法會產生Exception,所以我在下面給出修改后可以運行的方法。運行環境基于VS 2010 + Windows Phone 7 SDK RTW版。

調用MessageBox

創建Windows Phone 7中XNA 4.0的工程,然后,我們在Update方法里添加對于MessageBox的調用。當然,大家請不要認為把MessageBox加到Update里正確的,這樣會造成MessageBox不斷彈出。我只是為了簡化代碼,才這么做的。

protected override void Update(GameTime gameTime){// Allows the game to exitif (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)this.Exit();// TODO: Add your update logic hereList<string> MBOPTIONS = new List<string>(); MBOPTIONS.Add("OK");MBOPTIONS.Add("CANCEL");if (!Guide.IsVisible)Guide.BeginShowMessageBox("test", "hello, XNA", MBOPTIONS, 0, MessageBoxIcon.Alert, new AsyncCallback(RespCallback), null);base.Update(gameTime);}

由于Microsoft.Xna.Framework.GamerServices是默認添加的組件,所以,我們可以直接使用Guide類。首先創建一個string類型的List,用于保存MessageBox中按鈕的Text;然后通過List<string>的Add方法將需要顯示的Button Text添加進去。

接下來是Guide.IsVisible方法,由于MessageBox、SIP軟鍵盤等公用一個繪制表面,必須保證沒有其他UI顯示時,才能夠顯示指定組件,如果不添加這句Guide.IsVisible的判斷,將觸發下面的異常。

接下來就是調用的主體Guide.BeginShowMessageBox了,這是一個異步方法,調用后立刻返回。參數比較好理解,下面是函數的聲明:

public static IAsyncResult BeginShowMessageBox (string title,string text,IEnumerable<string> buttons,int focusButton,MessageBoxIcon icon,AsyncCallback callback,Object state )

第一個參數是標題,第二個參數是對話框內容,第三個是button上文字的列表,也表示有幾個Button出現,第四個是焦點在第幾個Button上,第五個是圖標,我們設置為null,第六個是結束時調用的Callback函數對象,最后一個是用戶自定義狀態對象,可以傳遞自定義信息。其他參數都容易理解,AsyncCallback對象需要一個Callback函數RespCallback,我們實現如下:

private static void RespCallback(IAsyncResult asynchronousResult){int? b = Guide.EndShowMessageBox(asynchronousResult);if (b > 0)Debug.WriteLine("Cancel");elseDebug.WriteLine("OK");}

Callback函數中最重要的工作是調用Guide.EndShowMessageBox函數,來關閉MessageBox。EndShowMessageBox需要傳入一個IAsyncResult對象,來自Callback函數的參數。返回值是一個可為空的int,如果為空則表示沒有返回值,如果不為空,返回值是Button的Index值,返回0表示點擊了第一個按鈕OK,返回1則表示點擊了第二個按鈕Cancel,以此類推。

顯示MessageBox的效果如下:

調用Software Input Panel

接下來是調用SIP軟鍵盤的代碼,仍舊放到Update方法里,Callback函數也一并給出。

protected override void Update(GameTime gameTime){// Allows the game to exitif (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)this.Exit();if (!Guide.IsVisible)Guide.BeginShowKeyboardInput(PlayerIndex.One,"Here's your Keyboard", "Type something...","abc",new AsyncCallback(GetTypedChars),null);base.Update(gameTime);}private static void GetTypedChars(IAsyncResult asynchronousResult){string output = Guide.EndShowKeyboardInput(asynchronousResult);Debug.WriteLine(output);}

前邊都解釋過了,直接來看Guide.BeginShowKeyboardInput,第一個參數要傳PlayerIndex進去,這個是針對Xbox的,在Windows和Windows Phone 7上只支持一個用戶,所以直接傳PlayerIndex.One就好了。接下來的三個參數是標題、描述和默認字符,然后是異步調用方法和自定義狀態。還有最后一個可選參數,表示是否用Password方式顯示字符。

public static IAsyncResult BeginShowKeyboardInput (PlayerIndex player,string title,string description,string defaultText,AsyncCallback callback,Object state,bool usePasswordMode )

在異步調用方法中,Guide.EndShowKeyboardInput會返回一個字符串,該字符串為用戶輸入的字符串。為什么顯示的是字符串呢,這和SIP的顯示方式有關。在調用SIP函數后,會首先彈出第一個對話框,詢問用戶是否輸入字符,如果用戶點Cancel則關閉SIP,如果點OK則進入第二個界面,用戶才能夠使用SIP軟鍵盤進行輸入。

下面就是SIP顯示的狀態:

寫到最后

今天的主角Guide類,還有很多有趣的函數調用,有興趣的朋友按照這個方法調用就可以了。這次的代碼量不多,所以就不給出單獨Sample Code的下載了。再有就是,虛心接受批評,將文章里代碼的格式弄好了。

我最近還是很勤快的,Windows Phone 7的開發都寫了三篇了,這是之前文章的鏈接:

馬寧的Windows Phone 7開發教程(1)——Windows Phone開發工具初體驗

馬寧的Windows Phone 7開發教程(2)——Windows Phone XNA 4.0 3D游戲開發


本文轉自馬寧博客園博客,原文鏈接:http://www.cnblogs.com/aawolf/archive/2010/09/20/1831848.html,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的马宁的Windows Phone 7开发教程(3)——XNA下使用MessageBox和软键盘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。