蜗牛的壳

蜗牛的壳

me =~ s/nai/liu/m;

浏览模式: 标准 | 列表
全部文章

雷人英语 之 春运


Metro 神翻译:春运 = Mass Migration(大规模迁徙)

大小: 845.35 K 尺寸: 400 x 300 浏览: 2 次点击打开新窗口浏览全图

我是该骂 HP?还是微软?还是 AMD?


首先,在讨论标题提出的问题之前,先鄙视一下 Linux!

好吧,本人 Linux 小白,自认不知好歹,竟然自己在 Western Digital MyBook World Edition 上面装 CUPS。折腾了一整天,终于排除万难,成功打印测试页。期间经历“can't resolve symbol 'stderr'”、“/usr/lib/cups/filter/foomatic-rip failed”、“Job stopped due to filter errors.”、“getopts: not found”等等恐怕各位开源高手都前所未见的错误,但是本 Linux 小白全部克服了!在没有完整文档的情况下克服了!

过五关斩六将之后,发现 Foomatics 驱动不能挂 Windows 客户端。好吧,咱用 PDF/PS 文件还不成么。无奈强大的 lp/lpr 命令直接“can't resolve symbol 'stderr'”(“老婆”不知错,罢工了,嘿嘿)。又找不到源代码来重新编译 lp/lpr。结局就是一整天的功夫全部白费了。


回归主题。这次麻烦的是 8 年半前买的 HP LaserJet 1000 激光打印机。这打印机没什么问题,这么长时间了一直正常工作,可是 HP 在 2005 年就终止了驱动程序更新。值得一提的是,HP 这款打印机使用了 Hostbase 技术,也就是说由驱动将要打印的页面转换为打印点阵,而打印机只负责打印就可以,无需任何计算。这种变态节省打印机设计复杂度的方案直接导致驱动无法与别的型号通用。

AMD 在 2004 年的时候划时代地推出了 64 位处理器,随后微软也赶时髦,搞了个 64 位操作系统。怎么说这也是科技的进步,可就是 HP 放出一句“我们正在开发 64 为驱动程序”之后就再无下文了。

如今是日历都以 201x 开头的年代,64 位马上就要取代 32 位。前几天组装服务器之后,Windows Server 2008 R2 直接默认安装为 64 位版本。

主板驱动很顺利就装上了。怎么说这块主板也有五六年历史了,正在感叹 Windows Server 2008 R2 对于驱动程序的兼容性真不错,HP LaserJet 1000 驱动直接拒绝安装。

于是,眼睁睁地看着还能正常工作的打印机却派不上用场,扔了可惜,留下来的话也就只能再装一台 Windows XP 电脑连接,如此一来家里真跟开网吧没什么区别了。

这到底是谁的错?HP 做出一台很耐用的打印机,AMD 带动科技发展趋势,微软将最新的科技普及,结果却是打印机再也无法使用了。一句话概括,这打印机跟现代高科技不兼容啊!

 


这次架设 Team Foundation Server 之后,所有的游戏底层代码库 + TGGe 库全部提交到 TFS 上管理。但是,TFS 没有像 MKS 一样的“shared project”概念(已有的工程可以作为其他工程的子工程,也就是“库”的概念)。最后终于找到一个折中的方法实现完整的项目代码重用。

首先,建立、或者从 TFS 取出(check-out)一个代码库解决方案(Solution),其中包括代码库工程(Project)。

然后,在需要使用这个代码库的 Solution 里面,添加现有工程(Add existing project),选择那个代码库工程。这样,库工程就被添加到游戏 Solution 里面去了。但是,缺点是在服务器端并不会保存这个链接,所以一定要在游戏 Solution 里面写好注释声明工程相关性(dependency)。

最后,我的第一个 Windows Phone 7 游戏工程变成了这样。(Sola 是我为 TGGe 取的开发代号,纯属没事闲的)

大小: 11.6 K 尺寸: 294 x 183 浏览: 0 次点击打开新窗口浏览全图

神服务器设置完成,感谢微软


经过一个星期不屑不懈的努力,终于把服务器配置完成了。现在服务器的作用更强大了:下载、文件寄存、代码托管、RADIUS。

再次不得不感谢微软,MSDNAA 和 Dream Spark 提供了很多免费的工具:Windows Server 2008 R2 (Standard)、Microsoft SQL Server 2008 (Developer)、Team Foundation Server 2010、Visual Studio 2010 (Ultimate)……

以下是 6 块硬盘的真相:

大小: 1.22 M 尺寸: 400 x 300 浏览: 2 次点击打开新窗口浏览全图

大小: 1.13 M 尺寸: 400 x 300 浏览: 1 次点击打开新窗口浏览全图

神主板:ASUS A8V-MX(竟然驱动程序在 Windows Server 2008 R2 还能正常使用)

大小: 1.77 M 尺寸: 400 x 300 浏览: 0 次点击打开新窗口浏览全图

Windows Phone 7,Xbox 360 好伴侣


Windows Phone 7 除了玩 Xbox Live 游戏外,还有一个更方便的应用——看攻略。

一边开着 Xbox 360,一边开着 Windows Phone 7 中的 OneNote……

大小: 617.16 K 尺寸: 225 x 400 浏览: 0 次点击打开新窗口浏览全图    大小: 575.29 K 尺寸: 225 x 400 浏览: 0 次点击打开新窗口浏览全图

大小: 512.48 K 尺寸: 400 x 225 浏览: 0 次点击打开新窗口浏览全图

大小: 574.59 K 尺寸: 400 x 225 浏览: 0 次点击打开新窗口浏览全图

大小: 501.46 K 尺寸: 400 x 225 浏览: 0 次点击打开新窗口浏览全图

最后,Windows Phone 7 和 Xbox 360 哥俩好的合影~

大小: 504.42 K 尺寸: 400 x 225 浏览: 0 次点击打开新窗口浏览全图

拼装神服务器,托管代码


粗略算了一下,家里面容量在 1TB 以下的“小硬盘”有好几块,再加上两台淘汰下来的主机,如果只用作下载机实在太浪费了。干脆拼装成一个服务器,顺便把前些日子写的 Windows Phone 7 代码托管上去,自己给自己 create issue、做 bug fix(纯粹没事闲的)。

想了就做,拼拼补补之后,有了这么一台服务器:

  • CPU:AMD 3500+(已服役 5 年半)
  • 内存:DDR 400 / PC 3200,因为内存条兼容问题,暂时为 1GB,正考虑换成 2GB 内存
  • 硬盘 1:IBM 40GB EIDE(已服役 8 年半)
  • 硬盘 2:西数 250GB EIDE(已服役至少 4 年,具体购买日期已经不记得了)
  • 硬盘 3:迈拓 300GB SATA,第 6 代(已服役至少 4 年,具体购买日期已经不记得了)
  • 硬盘 4:迈拓 300GB SATA x 2,第 7 代,RAID 1(已服役 5 年半)
  • 硬盘 5:迈拓 500GB EIDE(已服役至少 3 年,具体购买日期已经不记得了)
  • 读卡器(就是个摆设)

大小: 908.13 K 尺寸: 400 x 300 浏览: 0 次点击打开新窗口浏览全图

大小: 911.59 K 尺寸: 400 x 300 浏览: 0 次点击打开新窗口浏览全图

大小: 881.04 K 尺寸: 400 x 300 浏览: 0 次点击打开新窗口浏览全图

操作系统直接上 Windows Server 2008 R2,加挂 Team Foundation Server 2010。当然,uTorrent 和 Mipony 不能少。

炒菜健康?炒菜不健康?


回想 2000 年左右,还在国内的时候。当时所有的人都把自己的东西贬低得一无是处。甚至有“专家”撰文说“外国人研究表明,中国的炒菜不健康,因为使用了食用油”云云。

事隔 10 多年了,本来不想回想那一段黑历史,可是昨天 Metro 上的一条菜谱成功地唤醒了这段记忆。

大小: 1 M 尺寸: 400 x 300 浏览: 0 次点击打开新窗口浏览全图

P.S. 老婆从国内回来,说现在国内争相过洋节,反而对传统节日很平淡。嗯,这就叫做后殖民主义社会。

游戏基础库 + TGGe 开发状态


下周老婆大人就从国内回来了。估计到时候也没很多时间可以用在游戏开发上。好在最底层的基础库 + 实用库架构已经完成,以后再出问题只需要微调就可以了。

总结了一下目前为止完成的代码。(包含注释)游戏基础库代码量 3333 行(这个数字 - -|||),TGGe Extension 代码量 702 行。

大小: 733.9 K 尺寸: 400 x 300 浏览: 1 次点击打开新窗口浏览全图

去掉注释什么的,代码量也在 3500 行以上。这是目前我个人制作的最大的工程了。纪念一下。


又经过好几天不停地努力,终于可以正常显示游戏页面了。

大小: 895.11 K 尺寸: 400 x 217 浏览: 1 次点击打开新窗口浏览全图

这次耗了这么长时间,实际上一直都在完善引擎架构,为以后的代码重用做准备。其实这个游戏完全是 XNA 练习作业,所以也不用着急。

照例,这次记录一下比较关键的几点。

半透明效果

XNA 3.0 和 4.0 在做图片半透明处理的时候都要用到 Image Tint Color 这个参数(详见:SpriteBatch.Draw() 中的 color 参数)。

但是,XNA 3.0 和 4.0 最大的不同也在这里,这也直接导致从网上查到的 XNA 3.0 半透明处理方法(设置 Alpha 数值)在 4.0 上毫无作用。XNA 4.0 要用下面这种语法来实现半透明效果。(Opacity = 不透明度,取值范围:[0f, 1f])

C#代码
  1. TintColor = new Color(R, G, B, A) * Opacity;  

动画效果

动画的基本实现方法就是几幅图案轮流显示。这几幅图案可以来自同一张图片,也可以来自不同图片。如果来自同一张图片,需要用到 Image Source Rectangle(详见:SpriteBatch.Draw() 中的 sourceRectangle 参数)。为了编程方便,每一帧的大小都要一样。

下面是例图:(内含 4 个 16x16 像素帧)

大小: 2.8 K 尺寸: 64 x 16 浏览: 1 次点击打开新窗口浏览全图

字表生成

之前提到过,XNA 只能直接支持很少一部分字符(字母+数字+常用标点,没了)。所以,如果要显示中文或者其他特殊符号,需要自己建立字表,然后编译成字库。

一开始,我的字表包含 2500 常用汉字 + 1000 次常用汉字。结果编译之后发现没有“眺”这个字。(难道不是常用字么?)后来把字表扩大到约 7000 字(GB2312 字表),结果编译失败。说到底,XNA 还是利用字表文件生成一个超大的图像,然后再从图像中截取一个汉字来显示。但是,Windows Phone 7 的 XNA 最大才支持到 4096x2048 像素图像,7000 字的字表已经超过了这个范围。

没办法,自己动手新建一个工程,做了一个字表生成器。每次在故事脚本中添加文字之后都要用字表生成器来重新生成字表文件。但是,好处是这个字表文件编译起来很快,只需要大概一分钟。同时,也保证所有在脚本中出现过的文字都有对应的定义。

大小: 8.43 K 尺寸: 194 x 126 浏览: 0 次点击打开新窗口浏览全图

下载链接在最下方。

 

接下来的工作是完善游戏页面 + 制作控制开关。

不得不说,从某种意义上来讲,做游戏是个体力活,尤其是素材收集/处理/制作部分。背景素材还好说,随便去电影动画里面截取一下就好。但是,人物素材嘛,找不到又不会画的话,只能想点折中方案了……

fontcollectionmaker.rar 大小:5.52 K,已下载6次

Windows Phone 7 开发笔记:读取 XML


经过几天的努力,终于开始写 XML Parsing 的部分了。本来应该先写让图片变透明、利用 PNG 制作动画的心得,但是加了 XML Parsing 之后暂时无法到达游戏页面。所以那篇心得过两天再写。

照例首先贴一张开始画面的截图。(取材:《恋爱蜡笔:空之艺术》。看过《只有神知道的世界》的人都知道这款游戏……)

大小: 536.39 K 尺寸: 400 x 209 浏览: 7 次点击打开新窗口浏览全图

这个页面完全是根据下面这个 XML 文件生成的。没有任何 hard-coded 代码。

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <TGGe>  
  3.   <TitleScreen>  
  4.     <Background Image="Textures/Backgrounds/TitleBackground" Music="Sounds/Musics/Title" />  
  5.     <Menu Background="Textures/Backgrounds/SelectionBackground" Range="0,70,400,480">  
  6.       <Entry Action="f:StartGame">开始游戏</Entry>  
  7.       <Entry Action="">读取游戏</Entry>  
  8.       <Entry Action="">系统选项</Entry>  
  9.       <Entry Action="">制作团队</Entry>  
  10.       <Entry Action="f:ExitGame">退出游戏</Entry>  
  11.     </Menu>  
  12.   </TitleScreen>  
  13. </TGGe>  

这里需要注意的是,这个 XML 并不是 XnaContent 格式,所以不能编译,只能纯引用。所以属性要设置成下面这样。

大小: 9.69 K 尺寸: 291 x 223 浏览: 0 次点击打开新窗口浏览全图

因为使用了 XElement 作为 XML Parser,所以只能有一个根标签(Root Tag,在这里就是 TGGe)。最重要的一点,根标签不参与解析。所以,如果使用 <TitleScreen> 作为根标签,则无法找到所有的设置。

XElement 的使用方法很简单,就使用 .Element() 方法依次向下解析就好了。

C#代码
  1. this.scriptLoader = XElement.Load("Script.xml");  
  2.   
  3. // Parse XML  
  4. XElement screenConfig = scriptLoader.Element("TitleScreen");  
  5. XElement backgroundBlock = screenConfig.Element("Background");  
  6. XElement titleBlock = screenConfig.Element("Title");  
  7. XElement pictureBlock = screenConfig.Element("Picture");  
  8. XElement menuConfig = screenConfig.Descendants("Menu").First();  

下一步是写 Action 解析执行部分。

Records:30712345678910»



« 2012年02月 »
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

标签

用户


链接


归档


信息

  • 分类数量: 15
  • 文章数量: 307
  • 评论数量: 114
  • 标签数量: 556
  • 附件数量: 510
  • 引用数量: 0
  • 注册用户: 12
  • 今日访问: 109
  • 总访问量: 778608
  • 程序版本: 1.6


加拿大中文电话

  • CIBC
    1-888-298-8822
  • TD Canada Trust
    1-800-387-2828
  • HSBC
    1-888-310-4722
  • Scotia Bank
    1-800-830-8080
  • RBC Royal Bank
    1-888-769-2598
  • Rogers TV
    1-800-787-7953
    1-866-406-7239
  • Rogers Wireless
    1-800-828-9828
    or *2288
  • Fido
    1-866-888-3436
  • Bell Home Phone
    1-800-715-1888
  • Bell ExpressVu
    1-888-759-3474
  • UPS Delivery
    1-800-233-8133