代码升级确实很麻烦,不是一般的麻烦。

       因为需要整理出一套配合我自己写的D3D绘图引擎,所以我选择了以前的IGE作为项目的开端。原因很简单。因为现在的那些源代码是无法完成这个工作的。

       而且如果有了一套完善的基础版本,那么以后无论想改成啥都容易得多。

       说说绘图引擎,目前HGE算是主流吧,其实这是大家没有法子的选择。经过各位的总结,目前的HGE算是比较完善的。不过啊,我还是那句话,HGE原本就是给小型游戏搞的绘图引擎,不管你怎么改,底层写法如果没有改变,那么你就无法在大型的游戏里面得到理想的结果。

       那些代码,一张图片锁一次缓存区,一帧画面,到底要锁多少次?

       另外为什么一帧绘图得翻转n次?

       看不明白,这是一种什么样子的绘图思路,确实令人费解!

      如果是三维游戏,那么这个游戏会死得很惨!

       也有人采用ASP绘图引擎来做,结果很明显,达不到要求。这个玩意就不提了,从底层开始,人家的四边形面片,原本是用来做GUI的,你拿来做游戏主绘图,可以啊,不过底层结构你得改啊,不容易的,一大堆源代码,彼此嵌套,不说改了,理清楚逻辑就不是人做的事情。

       另外我想不明白的,一个主类的函数,是虚方法,这个没有冲突,问题是,这个方法得子类来写具体的实现,这个也没有问题,问题是,这个函数有点奇怪了,你在写主类的时候,怎么知道要传入那些参数,另外你怎么肯定这个方法转了几百次之后,它是不需要改变的。这些奇葩的玩意,在ASP的代码架构里面到处都是。

        我只知道,哪怕是一条函数,都是经过多次检测之后才肯定没有问题的。也就是说,外国佬在测试完子类实现代码之后再复写主类。我的天,真是有必要吗?

        ASP不是一个难字可以形容,绕,非常非常绕,满满都是坑。

         绘图引擎最关键的不是逻辑代码,而是直绘机制,干脆利落,为什么,因为这样做,效率高,而且没有隐患。

        什么隐患?就是不知道在什么时候给你弄出麻烦,而且你还无法知道原因所在。

         有人说,这些根本不具备什么技术含量!

         有,但是你不知道!

         你试试游戏帧速率在只有8,9帧的情况下,一下子把帧速率全面提升到几乎与显示器刷新率持平这种程度。

         另外关于写字,其实我不太明白,为什么还有那么多人纠结这个问题。

         当然了,游戏写字,很多人依然采用老套的画BMP图片,然后阿尔法处理像素,之后再转纹理,确实辛苦啊!还有干脆弄成资源文件读取方式,满满都是泪。

        其实拖慢帧速率的罪魁祸首就是像素拷贝,得至少拷贝两次啊,一张图片,你不慢,谁慢?

         没有什么好说,直接采用D3D9原本的函数,一次性写出来,想写啥就写啥,想采用什么字体就采用什么字体,人家三维游戏都没有纠结这个问题,你二维游戏纠结个啥。

         然后就是批量绘图,客户端里面,画地图三层结构,可以完全打开批量机制,等于是锁缓存区只要用到几次左右就合适,当然把握好的话,三层地图只锁定一次就行。

         由于写字跟绘制图片不同机制,所以不能够全面采用批量机制,但是至少解决了三层地图绘制效率的问题,当然后期可以继续优化,把握好的话,在大型PK的情况做一些优化处理,效率应该更好。

         至于GUI不必多提,这个玩意想咋弄都成。反正图片是死的,一次性画好,后面不必再创建纹理,没有必要。除非纹理掉失了,再重新创建就是了。最最不重要的部分就是这里了。

         当然了,一旦GUI控件达到千个以上,那么你需要考虑的就是,这套代码应该怎么优化了。这个时候就不要提升级的事情了。

 

         经过了几个月的奋战,整套代码已经升级到delphi 10.1版本下

 

 

       其实这个过程一点都轻松,可以说满满的一掬心酸泪。

       有的朋友问,为什么要升级啊,是啊,为什么要升级呢??

       是的,为什么要升级,哈哈哈哈哈哈哈,为什么要升级??哈哈。

       都是程序员,这个笑话就不多提了,谁不比谁聪明多少!

       ---------------------------------------------------------------------------------------------------------------

       我的劝告,如果可以,最好跟几个朋友一起干,一个人得累死,就像我这样的!

       真是很累,你得面对无数次程序崩溃,电脑系统蓝屏等等

       最要命的都是字符串,以前那种直接发送字符串方式已经不行了,不管你填充入内存或者直接发送,都不行,你得面对各种各样的乱码,然后程序崩溃!由于数据类型相当复杂,而且让人无奈,你想想人物数据结构有多么复杂吧。

      里面成员变量嵌套各种数据结构,字符串类型的,布尔类型的,啥都有,确实吓死人,不说传输了,就算是保存,你都不敢完全肯定不会出错。

      花在网络通讯方面的时间是最多的,因为得不到正确的结果,所以一次次改变代码函数,一次次测试,最终才解决掉。

       真是悲催,以前的都是采用直接发送字符串的方式,确实很写意轻松,现在新编译器下,说真的,我感觉对字符串处理还不是很理想。当前程序下,各种字符串填充内存块,拷贝是没有任何问题的,但是不能动,哪怕一点点,就像M2跟网关通讯那样,后面拼接了内存,最后的结果,出现大量的乱码和掉包。

      其实这些都是以前不严格的做法造成的。

      说真的,那些代码很难保证程序的稳定性,尤其是一些设置参数,几乎是心血来潮就各种写,各种作,这里一套,那里一套,还有一个全局的的,自己也来一套,之后,到底谁改变了谁,天知道。这样玩意能稳定,去,算了吧。

      整套程序要稳定,第一就是,设置参数必须统一。这没有什么好说。

     暂时这样吧。

posted on 2017-10-31 14:49  一笑如风  阅读(1288)  评论(1编辑  收藏  举报