微端游戏启动器launcher的制作(序篇)

时间:2023-03-09 23:01:47
微端游戏启动器launcher的制作(序篇)

公司要做一个游戏接入腾讯QQ游戏大厅,腾讯要求制作一个launcher,公司之前并没有接入过腾讯,所以大家其实都不懂,而我又是新人,所以刚拿到这个任务的时候整个人就是一个大写的懵逼。在网上查找了不少的资料,但是关于launcher的实在太少了,所以经历了半个多月终于写完launcher的我决定写这个系列的博客,希望能给大家一个参考。我是用C#写的,因为能查到的文档实在太少,所以流程基本都是自己实现的,如果有错希望大家指出。

首先launcher是什么:

我的理解就是一个游戏启动器,微端游戏为了避免资源太庞大启动太慢的问题而设计出了launcher这种东西,先下载一部分必要的资源,然后拉起游戏exe,之后的资源就边玩游戏边下载啦。这样就避免玩家在启动游戏的时候等太久一怒之下点了右上角的叉叉不玩了~

然后是launcher的功能:

既然知道了launcher是什么,那它的基本功能应该也知道了。launcher主要有几大功能,从web服务器下载文件,解压文件,启动游戏exe,和QQ游戏大厅通信(如果不接入QQ游戏大厅的话就没有这个了,腾讯给的是C++的动态库,并且接口全部都是纯虚函数,所以C#不能直接使用,如果有源码可以重新编译成C#,可惜我并没有。。。。。。我的做法是重新根据他给的demo封装一个C++动态库再引用,反正比较坑,最坑的就是指针和回调,花了挺多时间的)。

除了这些基本的功能,还有一些附加项,下载功能中有一个MD5码对比,MD5码是为了保密(?),有计算MD5码的api,直接用就行了,这里就是从web获取一个配置文件,里面包含了web上所有文件的MD5码,然后在本地计算出当前文件的MD5码对比,如果一样就不下载如果不一样就下载(还是有良心的给大家省了流量~~~)。既然说到了配置文件,就得有生成这个配置文件的程序,总不能几百个文件让人家手动的添加到配置文件里吧,这个和launcher功能是分开的,但是却不得不做。还有一个和launcher功能分开却不得不做的就是压缩功能,因为要解压就必须要压缩啊,我知道现在有很多压缩解压工具,但是你试试你能不能用程序解别人的压缩包,反正我是做不出来。。。。。。所以写压缩工具的人真是强大,什么压缩包都能解,不管别人是什么奇葩(?==、)的压缩方式,这可不是说同一种格式的就能互相解压的,压缩算法多种多样,这也是一个神奇的东西,我是不懂啦,就能用用人家的接口而已。也有一种方法就是调用本地安装的解压工具,但是万一人家电脑上没有解压工具呢,虽然不太可能但是我们程序员有句话叫不要猜测用户行为,意思就是什么情况都是有可能发生的。你也可以自带一个解压工具的安装包,如果人家的电脑上没有就给人家安装一个,跟那什么软件的全家桶一样,哈哈哈这是个耍流氓的事我还是不做了。。。。。。然后还有些什么链接啊什么的都是小问题了,都有现成的api一个函数就搞定了,感叹C#的强大,这让我们C++程序员如何是好?难怪C++程序员不转语言就找不到工作~~~

现在基本流程有了,就要开始制作launcher了。

毕竟我是一个C++程序员,所以一开始我还是准备用C++做的并且做好了下载功能和解压功能,比较坑~需要自己编译开源库配置库等等,别问我怎么编译开源库,我不会~~~我也是朋友帮忙编译的,据说是cmake?然后到了要做界面的时候就想到了MFC,毕竟人家是C++为基础的嘛。MFC是个神奇的东西,要想用MFC做出一个漂亮的界面不是不可以,只是首先你得是一个优秀的MFC程序员,然而我新建一个MFC之后就被它自带的各种东西给整懵逼了,一个app,一个dlg,main函数入口被封装起来了,程序的调用顺序就变得诡异起来,会先运行一个什么再拉起一个什么再run一个什么(好吧都是废话,因为我没记住~~~)。然后一个星期之后我们老大就说我想着你是C++程序员所以让你用C++试一试,但是C++太复杂太耗时间了,要不你换一种语言?(我:。。。。。。你是在逗我吗?早说啊!!!)然而我并没有说出来,而是说好,毕竟我是一个被生活所迫的人,如果能给我三个月,我是很愿意用C++来做的,但是事实上并不可能,所以之前的东西全部没用了,换成了C#。

在被C++摧残之后再写C#简直就是走上了康庄大道啊,大概花了两三天的时间界面框架和下载解压功能就做好了,不得不再次感叹C#的强大。想起之前用C++写一个游戏服务器,客户端的子弹就是调一个射线的api,然后服务器为了验证这个子弹是否打到了对方就必须自己实现类似射线的机制,我写了好久而且是出bug最多的地方。不过也还是得益于我用C++写过一遍,所以对流程的理解比较深刻,毕竟是受过摧残的~我就是要强行给C++正名!!!毕竟这些高级语言的底层都是C++,不过这都是大神们写出来的,我们这些C++程序员都只是难找工作的小白菜。。。。。。

最后我决定用wpf,基于C#的,用C#写后台逻辑,它有个xaml文件,编辑界面的,还用了C#的动态库也用了C++的动态库,其实我作为一个C++程序员,基本其他语言都没有怎么接触过,只知道他们封装的很牛逼。C++涉及的面太窄了(大神们除外,我是小白菜),做C++的感受就是什么你都得自己来,所以懂的东西呢就能理解得比较深,但是不懂的东西呢就完全不懂~~~大概就是这么个状态。不过做C++的人呢学习能力比较强,懂得操作系统的底层机制(我们老大说如果不是这样的话他是不会要我进公司的,不能因为我是个妹子就留下我~毕竟我们是一个游戏公司,现在应该没有人用C++写网络游戏吧),我记得当时我们老大问了我一个问题是操作系统怎么实现运行时多态~~~好吧我又在说废话了,说这么多只是想说不会没关系,程序太博大精深,没有谁都会的,不会别怕,学嘛。我刚开始也是连launcher是什么都不知道,毕竟不玩游戏,甚至在很困难的时候觉得自己要转行了,现在也还是做出来了,蛮有成就感的吧。

实现了这些功能呢一个launcher就基本完成了,用户看到的就是一个窗口然后一个进度条在那里跑,能点链接能开始游戏,却不知道它背后做了多少事~重要的是我们程序员死了多少脑细胞做了多少事~

好吧这篇基本都是废话,随便看看吧,接下来会分成几个部分具体的写每个功能的。

转载请注明出处~