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