Windows Phone 7 XNA4 游戏开发全面速查资料

 

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相关,这必须要两台以上真机才可以确定。

posted @ 2010-11-22 12:44  疯光无线  阅读(837)  评论(1编辑  收藏  举报