Update 2010-11-24(*u2*)
Update 2010-11-23(*u*)
XNA4在wp7上的解析度問題
大部分情況下自動化佈建都能令你滿意
wp7上的全屏就是全屏,非全屏就是上面留一條給電量顯示云云的。預設為非全螢幕模式。
wp7上的最大解析度是 800*480 或者 480*800 ,小於此解析度自動同比放大,黑色填充不滿的地區。
你設定高比寬大 預設是豎屏。設定高比寬小,預設是橫屏,左右翻轉手機時自動切換。寬高相等認為是豎屏。
雖然也可以通過設定允許的旋轉方向來改變這個行為。大部分情況都沒有意義。
除非你設定一個解析度480*480 你可以讓他 豎屏 左 右 全部自適應。
非方形的解析度 同時開啟豎屏和左右的支援,會被強製成豎屏,左右旋轉時會有解析度bug。
如果你需要一個任意旋轉的螢幕,調用陀螺儀和自己控制繪製方向恐怕是唯一的辦法。
XNA4 分為兩個標準配置 reach 和 high
high能用於pc和xbox,
wp7 在reach配置的基礎上還不允許customshader
WP7上的開發環境是 dotnet framework 3.5 compact pure c#
不用奇怪,很多東西沒有,沒有完整的反射,沒有二進位序列化,沒有一些資料結構比如sortedlist
WP7調試沒有PC端方便
wp7沒有編輯並繼續,不能附加到進程,所以應該建立同步的pc項目。
只要編譯能在兩個平台上通過,由pc項目轉換到wp7調試是很簡單的,單這一項就足以為你節省很多時間。
wp7上的可用儲存
TitleContainer
訪問隨程式一起發布的資源:我們通常稱為bin\
IsolatedStorage
訪問分配給應用程式的臨時儲存區,臨時儲存區不確定性太強,生存期和容量都沒有保證。
官方建議是用臨時儲存區儲存本地存檔,實際上,我覺得他連儲存存檔都不合格。
這基本上只能類似等同於IE臨時檔案,PC上對於silverlight的臨時儲存區,一個應用預設只有1M配額,wp7未經測試
(*u*)在模擬器測試,配額介面傳回值異常,可用臨時儲存區兩個G,只能在一個應用中使用。仍然需要真機測試
使用者儲存區
沒有辦法在使用者儲存區儲存任意檔案,這是因為wp7本身就拋棄了資源管理員這樣的設計,當然破解無所不能。
要收錢的遊戲不能用破解手段,取代使用者儲存區的是
MediaLibrary
可以儲存圖片,可以讀取圖片音樂縮圖專輯等資訊
如果要儲存存檔,可以把資訊編碼在圖片中儲存,其他類型的資料也可以,這個功能不能在pc端和wp7模擬器中測試
拿到真機後,我會對這個功能做更詳細的測試。
這將是唯一可在本地跨應用交換資料的手段,對MediaLibrary的深入研究灰常有必要,為了避免一切可能的封鎖,直接將資訊編碼到圖片是最可靠的方式。
只要我們轉換思路,wp7的限制並不是那麼強
(*u*)和文檔不同,在模擬器上可以調用此介面,檔案名稱只要不是.jpg結尾,一定會刪除最後一節副檔名改為.jpg.
允許重名檔案,無法刪除和修改已存在檔案。
檔案流必須是jpg檔案格式,否則會出錯。
在jpg檔案格式之後可以追加寫入資料,可正常讀取出來。
仍然需要真機測試重名問題,雖然可以跨應用通訊,但是只能追加不能修改還是產生了比較大的應用限制。
wp7上的輸入
文字錄入
調用Guide.BeginShowKeyboardInput 可以調用標準的輸入面板
建議使用這個玩意,現在已經可以輸入6國語言,雖然還不包括中文,但我們都知道那隻是個時間問題。
touch
支援觸摸點狀態檢測和手勢
忘記手勢吧,那不會帶來更好的體驗
大部分的操作都是單手完成的,點擊,拖動,長按。
製作自由的兩點操作,比如一個自由控制攝像機的方案,我已經實現了,效果很不錯的。
輸入的特點就是要簡潔,多一點想象力,不要用手勢去束縛。
button
WP7隻支援一個按鈕Back ,其他是xbox的,此back就是wp7標準按鈕左下角的回退。
微軟對響應此按鈕的事件做出了詳細要求,在子介面要能夠退回上一層,可以插入對話方塊來確認,在對話方塊顯示時再按回退,即表示同意回退。
在主菜單回退則退出應用。
wp7程式退出和恢複
wp7程式退出和恢複,官方雖然有要求,但他什麼也沒做。
按下開始鍵或者搜尋鍵時,你沒有任何機會
OnExiting事件被執行,同時介面已經退出,你不可能攔截他,也不可能給使用者任何提示。你
你只能在OnExiting裡慢慢向臨時儲存區儲存你的程式狀態,或者不儲存,那你的程式再也回不到這個狀態了。
程式恢複沒有任何通知,他就是和新開一個程式沒有兩樣。
所以你應該檢查你之前有沒有儲存過狀態,有,就恢複他。
(*u*)觀察內嵌office程式的行為明顯可以區分恢複和運行,經檢查silverlight的事件是可以區分開恢複和運行
(*u2*)PhoneApplicationService.Current,這個在XNA裡也可以使用,game預設的事件無用,直接在這上面可以有所有的事件。可以用這裡的state儲存要恢複的對象。
需要注意不可以在OnExiting事件裡儲存state,該對象已經無用。也不可在Game建構函式中恢複資料,
wp7可以借鑒什麼
dotnet cf,以前搞嵌入式開發的傢伙們,都是前輩。
wp7的唯一識別
目前拿不到綁定的liveid
xbox live 系列介面只能在真機調試
wp7推送服務可以產生一個唯一識別,不知道是硬體相關還是綁定id相關,這必須要兩台以上真機才可以確定。