您的位置:首页 > 其它

利用NSIS制作游戏安装包

2010-03-18 22:42 363 查看
随着最近营销人员的介入,对于游戏安装包的制作提了一些小小的要求--“不要土土的RAR自解压安装,不要死板的软件式安装,最好来点闪屏效果,枯燥的安装过程给玩家展示一下能够表现游戏特色的美术原画”。看来这要求不算过分,但是原有的方式却不适用了,改呗,改到大家都满意,玩家也方便。

需求算是明确了,但是涉及到安装流程这样的修改还是找个模板参照的好些,比起从头考虑简单很多,也避免沟通上的误差。策划速度就是快,嗖嗖的启动几款当前主流游戏的安装包,锁定目标,就它吧--梦幻XX(东家也有类似名字的游戏,所以就不给对手做广告了)。

目标明确,开始找工具吧(自己动手写太费事,虽然需求不高,但是自己写也非易事,不相信的同学可以尝试一下,从压缩算法到各种系统设置,注册表读写没点耐心和时间是搞不定的,时间可不能浪费在重复造轮子上)。

InstallShield、Wise等商业软件就不考虑了,公司有钱也不能乱花,何况也没必要花这么大代价,申请起来也很麻烦(上市公司不知道是否都这德性)--好吧,已经找了这么一大堆借口了,开始google开源免费的安装工具吧。

上一个版本的安装包就是使用Inno Setup来制作的,短短的几行脚本就完成了简单的客户端打包安装,不过对其功能查询了一下,似乎不方便实现安装过程的背景图切换(不是安装向导对话框的背景,而是类似桌面一样的大背景窗口,看看梦幻XX的安装就清楚了)。

免费的KFC没了,但是却找到免费的麦当~,Nullsoft脚本安装系统(NSIS)满足上述需求,还有很多方便的插件功能,真是相当的强大,总算请出了介绍的主角了,瞌睡来了,明天再写。ZZZzzz...

简略附上需求涉及到的几个技术点:

1、闪屏动画表现

直接使用AdvSplash

File /oname=$PLUGINSDIR/splash.bmp "${NSISDIR}/Contrib/Graphics/Wizard/orange-uninstall.bmp"
advsplash::show 2000 0 0 0x1856B1 $PLUGINSDIR/splash

其中0x1856B1表示需要挖去的透明色,替换为自己想要的颜色就可以了。

2、背景贴图的切换

使用BgImage插件,但是有一个问题在于此插件创建的背景窗口是和桌面分辨率一样大的,而策划希望的背景窗口只是1024x768,不希望将用户的桌面全部覆盖了。看了一下插件的源代码,不想再扩展新的接口了,直接在SetBg接口的GRADIENT分支中将待创建的窗口hardcode为此尺寸标准。完美的解决方案当然是为SetBg设计一个新的分支应用,这里偷懒了。

修改容易,比较头疼的还是插件的编译了,NSIS的源码采用Scons来编译,而Scons自身又是Python编写的,因此需要两者都安装一下。Scons这类软件构建工具没用过,感觉和版本相关度太大了。有人写过详细的编译攻略,这里不再赘述/article/4929471.html

3、移动安装向导窗体
默认的安装向导窗体会居中显示,这里常常会遮挡住希望呈现给玩家的背景贴图,这当然得移走了。
首先得获取当前屏幕分辨率

System::Call 'user32::GetSystemMetrics(i 0) i .r0'
System::Call 'user32::GetSystemMetrics(i 1) i .r1'

然后根据r0和r1的获得的分辨率就可以计算窗体预计需要移动的位置,移动窗体位置需要调用一下系统函数,如下代码就是移动到800,400的坐标处。

System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) i ($HWNDPARENT, 0, 800, 400, 0, 0, 0x201)"

利用NSIS制作的完整安装包,下面两个问题比较恶心。

4、Vista卸载菜单问题

Vista上安装程序添加开始菜单没问题,但是卸载执行完之后,会残留安装时增加的菜单。

解决办法:

参照官网的解决办法 http://nsis.sourceforge.net/Shortcuts_removal_fails_on_Windows_Vista

5、Win7下不能启动的兼容性问题(最大发现)

这个问题郁闷很久,差点放弃此打包工具。

故障现象为采用双击运行、管理员身份运行,程序都毫无反应,进程管理器里也查不到任何踪迹,正在找不到线索时,重启一下电脑,结果在系统关闭前会出现一个提示对话框,“目前16位程序所使用的其他文件太多,请退出部分16位程序,或者增加CONFIG.SYS文件中的FILES命令的值”。总算抓到一根救命稻草了,不过google也没找到合适的解决方法,只能根据这条提示信息琢磨了。只能进行对比测试,利用NSIS制作了一个包含较少文件的安装包,却能够在Win7下顺利起来。这一点触发自己思考是否完整安装包中包含的零散文件太多了,想了很久才想到是不是跟程序运行前进行的CRC自检有关系,这一步骤中肯定是需要读取包内的文件的,如果其实现和文件打开数量限制有关系,那么确实有可能引发。

解决办法:

首先尝试在命令行中加入参数/NCRC来启动程序,这下程序总算能够顺利的执行起来了,不过使用命令行的方式对于玩家操作也太复杂了,玩个游戏哪还有功夫去学习这些操作呀,这个对于游戏的安装来说无疑增大了门槛,只能修改了,得把玩家都当小白来对待(这里是降低入门难度,可不是侮辱玩家的智慧)。

既然和这个校验有关,那么就关闭CRC校验吧,真要出现下载有问题的玩家,只能再引导他们利用MD5来计算完整性了。

一行代码搞定CRCCheck off

PS:现在的游戏安装包都比较大,对于压缩之后超过2G的完整安装包来说NSIS还不支持,请另想他法。

完整安装包下周外放,到时候还得跟踪几天玩家下载安装的问题,再继续优化安装流程吧,希望玩家能喜欢新的安装流程。

再次感谢这些开源软件的设计者!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: