me =~ s/nai/liu/m;
在家宅了好几天,一直说做一套游戏引擎,断断续续终于做出个开始页面,而且还是从微软提供的 Catapult 实例修改来的。按钮图片时随手画的,小绿的图片是随手拿的。
其实改动还是很大的。为了重用性,特意加了 ScreenAsset 类来描述页面上的各个组件。另外还重构了好几个类,该合并的合并,该分拆的分拆,大部分设置都改成可以自行调整的参数。
游戏开始页面无非就是那么几个部分:背景、标题、附加的图像、菜单(多个文字+图像)。
总结经验如下:
1. 游戏的启动顺序是:Constructor => Initialize() => LoadContent(),然后就开始按照帧率执行 Update() 和 Draw() 方法。(参考阅读)
2. 标准游戏字体只能使用拉丁字母,需要中文要自己建立字表和 FontProcessor 来编译字库。这个字体编译很耗时,在我的 Core i7 860 上编译 3500 个汉字大概要半个小时。(参考阅读,其中要注意的是字表文件要放到 Content 文件夹下,并且设置为“不编译”)
3. 最好不要在 Constructor 里面生成页面,因为此时 GraphicDeviceManager 还没有初始化完毕,很多参数无法拿到。建议在 LoadContent() 里面生成页面。
4. 一次手误,将 Properties 的 get/set 操作中的变量名和属性名给写重了,结果编译之后莫名崩溃,找了好半天才找到原因。
5. 音频文件只支持 WAV(?),所以我加了个背景音乐之后,编译出来的 XAP 竟然有 32MB。
接下来要做游戏页面了。不知道又要花多少天。
今年陪我过圣诞的是——小光~(微软 Silverlight 娘)
另附一张前天在玩《Memories Off 6 ~T-Wave~》时,无意中松开 RT 得到的画面。(偏旁部首如此排列我看不懂,但是听上去像是“圣诞快乐”这句话)
值得一提的是,本性难移,我这人生 20 多年,每次在从莉莉丝和智莎两种类型之间选择时,都会选择智莎……而莉莉丝,就是那个到最后连朋友都做不成的角色……
P.S. Lunarpages 主机升级了,传个图片费死劲。搞了一个多小时才传好。
今天看到了 cnBeta 上讲天河1号的一篇文章。有几个细节值得关注一下。
“自主研发的处理器 FT-1000”:在网上搜索了一下,相关信息很少,貌似是基于 Sun 的开放架构改进的。至于这算不算自主研发暂且不说,至少没有硬件上的后门。
“自主研发的高性能互联接口芯片 NIC”:其实就是 Ethernet -> PCIe 2.0 Bridge。不过,对于 16 Lanes 和 1.1 us 这两个数据我还是很关注的。因为不确定芯片的基准频率(125 MHz ~ 500 MHz 之间),所以不好估算真实的性能。但是,可以肯定的是这块芯片运行在 store-and-forward 模式下,因为需要 packet re-assembly。这个 16 Lanes 和 1.1 us 的性能就算不是国际顶尖,也很不错了。
“自主研发的高阶互联交换芯片 NRC”:说白了就是三层协议 16 口 Ethernet 交换芯片。对于片内延迟 30 ns 这个超级强大的数据,我表示不能接受。三层交换竟然能达到 30 ns,也就是说基准频率 500 MHz 的情况下 15 个时钟周期完成交换,就算 cut-through 模式这也实在太快了。我见过的芯片(我说的是芯片,不是芯片内部的交换模块),估计 30 ns 连 buffer 都没填满。
至此,我表示压力太大了。如果研发单位(国防科技大学?)把上面这两块芯片单独拿到市场上卖的话,估计我就该回家喝西北风了。
注:在看文章的时候我做了个假设,所有芯片的基准频率最高到 500 MHz。因为我不认为国内有实力去研究 500 MHz 以上的工艺(是工艺,不是设计)。事实上,高频率对芯片内或引脚之间的信号互扰、芯片内部的时钟延迟有很大影响。如果国内真能研究出更高频率,那还锁在抽屉里干嘛,出手就能把国外公司杀个片甲不留。
篇首废话:今天没事闲的开始写 TBGE 的初始规格稿。反正过几天圣诞在家,自己写一个玩玩吧。既然打算开始做 TBGE,第一个演示版要简单而且应用到所有功能。于是乎,在网上搜素材的时候发现这么个东东。(不知道这是啥的同学说明你宅的还不够哦~)感谢百度帖吧……
刚买了 Windows Phone 7,自然要拿来练练手。好久没正经写过软件程序了,对于 .Net、Silverlight 还很陌生。摸爬滚打之后,总结一些通用的东西。
第一个练习程序很简单:读取网络内容,分析/提取有用的信息,然后显示出来。
读取网络内容
Silverlight 作为 .Net 的子集,依然是使用异步通讯法读取 HTTP 资源。也就是说,通过 HttpWebRequest.BeginGetResponse() 先发送非阻止请求(non-blocking),然后通过回调函数(Callback)来处理真正的返回内容。(具体例子可以参见:MSDN 资料)
但是,MSDN 给出的例子却不能正常在 Windows Phone 7 上面运行。问题就出在“多线程”机制上。MSDN 的例子,在发送请求之后,通过调用 allDone.WaitOne() 等待回调函数触发 allDone 事件。但实际上因为 Windows Phone 7 的多线程机制,进程会卡死在等候 allDone 事件上。
另外,由于回调函数属于另外一个非用户界面线程(non-UI thread),所以任何跟 UI 有关的代码都不能直接出现在回调函数中,否则会出现“Invalid cross-thread access”异常。解决方法下面会提到。
分析/提取内容
不多说,正则表达式(Regular Expression)是不二的选择。只是要在规则(pattern)字符串前加一个 @,这样才能使用正则表达式的转义符(比如:\s、\w 等等)。MSDN 资料
显示内容
之前提到过,在非用户界面线程中直接调用跟用户界面有关的代码,哪怕是向 ListBox 中添加项,都会造成异常。这时候就需要 Dispatcher 参与。
终于没忍住,冲到 Best Buy 买了一个 HTC 7 Surround。感受全新的 Windows Phone 7 之后,感觉三大平台各有千秋。我没用过 Android,所以这个事实上的市场第一就不参与评比了。
Symbian
换手机之前用的是 Nokia 5800,Symbian S60 v5 系统。Nokia 不愧是老牌手机厂商,就连自己的手机系统都是以“电 话”功能为主。除了电话功能之外,其他的上网、游戏、应用等等“外围功能”都做得一般般,没什么出彩的地方。甚至自身的 Ovi Store 排列凌乱,也没有好用的应用。但是,如果想要一个打电话的手机,Nokia 是不二的选择。性价比高、信号好,这些都是别的厂商无法超越的。另外还要表扬的是 Nokia 免费的 Ovi Maps 导航。不仅地图精细,还带有车道提示(Lane Assistance)。
iOS
我不曾有过苹果 iPhone。但是好像周围所有人用的都是 iPhone,所以也经常拿来把玩。说句实话,苹果的界面做得十分人性化,这也符合苹果公司的一贯风格—— UI 至上。如果要问苹果和微软有什么区别。第一,苹果不做系统;第二,苹果的用户界面功底炉火纯青。所以,iOS 最为人称道的便是“用户体验”。手势操作、平滑滚动、缩放、滑动等等让人称赞的地方无一不是 UI。
但是,iPhone 的定义还是“电话”。最早的 iPhone 瞄准的是手机市场,在 iPhone 3G 之后才转型为移动网络终端,着重于网页浏览、附加应用等等方面。但是,到了 iPhone 4,“电话”却成了最薄弱的功能。这也算是苹果的败笔/特色(取决于从那个角度去看)。
Windows Phone 7
微软下决心在移动平台上有所作为。于是微软推翻了 Windows Mobile 系列的 Win CE 内核,重新制作了一套 Windows Phone 内核。
拿到 Windows Phone 7 之后,发现这已经不能称作是一个手机了,而是一个彻头彻尾的互联网终端。“电话”只是其中的一个功能,和互联网、游戏、社交平行的功能。
从用户体验来讲,Windows Phone 7 和 iOS 旗鼓相当。操作流畅、手势应用,最重要的是 Windows Phone 7 集成了几乎全套的 Windows Live 服务。微软不愧是做系统出身的,这一次把系统整合发挥的淋漓尽致。Windows Live Mail、Contact、Calendar、SkyDrive、Office Live、Xbox Live 一个不差,这也是我为什么为之心动。
但是 Windows Phone 7 还不完善。没有复制/粘贴、多任务等等关键功能。但是,微软一直在努力,Windows Phone 7 也将一直会进步。就像 Xbox 一样,虽然第一代看似发育不良,但是第二代确有突飞猛进的进步。
最后,要喷一下 Windows Phone 7 的联系人功能。要想从联系人列表里拨电话,要先进入 People,然后滚动/快进找到联系人,点击联系人,然后再点击详细资料里的电话号码才能拨出去。而联系人列表是从 Windows Live 同步来的。如果你的 Windows Live 联系人很杂乱,那么对不起,Windows Phone 7 的列表也会很杂乱。就因为这个,今天我花了一下午时间整理、删除、合并 Windows Live 联系人,终于把显示数量从近 500 个降到 140 多个。长久不联系的、不认识的、朋友的朋友全部进了垃圾桶。对这些人我也只能说声“对不起”了。阿门!
从网上找了一个破解的《Mirror's Edge》xex 文件,好处就是可以随意更改 ini。
但是光盘上的 Coalesced.ini 是被打过包的 ini 集合。麻烦归麻烦,随手做了一个 Coalesced.ini 封包/解包程序(cooker)。试了一下运行良好。
想把每关 Speed Run 的时间限制改成 1 小时么?试试这个吧。
下载地址 (需要 .NET Framework 3.0)
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 |