关于引擎代码从Delphi 2007 升级至Delphi 10.1的一些历程
代码升级确实很麻烦,不是一般的麻烦。
因为需要整理出一套配合我自己写的D3D绘图引擎,所以我选择了以前的IGE作为项目的开端。原因很简单。因为现在的那些源代码是无法完成这个工作的。
而且如果有了一套完善的基础版本,那么以后无论想改成啥都容易得多。
说说绘图引擎,目前HGE算是主流吧,其实这是大家没有法子的选择。经过各位的总结,目前的HGE算是比较完善的。不过啊,我还是那句话,HGE原本就是给小型游戏搞的绘图引擎,不管你怎么改,底层写法如果没有改变,那么你就无法在大型的游戏里面得到理想的结果。
那些代码,一张图片锁一次缓存区,一帧画面,到底要锁多少次?
另外为什么一帧绘图得翻转n次?
看不明白,这是一种什么样子的绘图思路,确实令人费解!
如果是三维游戏,那么这个游戏会死得很惨!
也有人采用ASP绘图引擎来做,结果很明显,达不到要求。这个玩意就不提了,从底层开始,人家的四边形面片,原本是用来做GUI的,你拿来做游戏主绘图,可以啊,不过底层结构你得改啊,不容易的,一大堆源代码,彼此嵌套,不说改了,理清楚逻辑就不是人做的事情。
另外我想不明白的,一个主类的函数,是虚方法,这个没有冲突,问题是,这个方法得子类来写具体的实现,这个也没有问题,问题是,这个函数有点奇怪了,你在写主类的时候,怎么知道要传入那些参数,另外你怎么肯定这个方法转了几百次之后,它是不需要改变的。这些奇葩的玩意,在ASP的代码架构里面到处都是。
我只知道,哪怕是一条函数,都是经过多次检测之后才肯定没有问题的。也就是说,外国佬在测试完子类实现代码之后再复写主类。我的天,真是有必要吗?
ASP不是一个难字可以形容,绕,非常非常绕,满满都是坑。
绘图引擎最关键的不是逻辑代码,而是直绘机制,干脆利落,为什么,因为这样做,效率高,而且没有隐患。
什么隐患?就是不知道在什么时候给你弄出麻烦,而且你还无法知道原因所在。
有人说,这些根本不具备什么技术含量!
有,但是你不知道!
你试试游戏帧速率在只有8,9帧的情况下,一下子把帧速率全面提升到几乎与显示器刷新率持平这种程度。
另外关于写字,其实我不太明白,为什么还有那么多人纠结这个问题。
当然了,游戏写字,很多人依然采用老套的画BMP图片,然后阿尔法处理像素,之后再转纹理,确实辛苦啊!还有干脆弄成资源文件读取方式,满满都是泪。
其实拖慢帧速率的罪魁祸首就是像素拷贝,得至少拷贝两次啊,一张图片,你不慢,谁慢?
没有什么好说,直接采用D3D9原本的函数,一次性写出来,想写啥就写啥,想采用什么字体就采用什么字体,人家三维游戏都没有纠结这个问题,你二维游戏纠结个啥。
然后就是批量绘图,客户端里面,画地图三层结构,可以完全打开批量机制,等于是锁缓存区只要用到几次左右就合适,当然把握好的话,三层地图只锁定一次就行。
由于写字跟绘制图片不同机制,所以不能够全面采用批量机制,但是至少解决了三层地图绘制效率的问题,当然后期可以继续优化,把握好的话,在大型PK的情况做一些优化处理,效率应该更好。
至于GUI不必多提,这个玩意想咋弄都成。反正图片是死的,一次性画好,后面不必再创建纹理,没有必要。除非纹理掉失了,再重新创建就是了。最最不重要的部分就是这里了。
当然了,一旦GUI控件达到千个以上,那么你需要考虑的就是,这套代码应该怎么优化了。这个时候就不要提升级的事情了。
经过了几个月的奋战,整套代码已经升级到delphi 10.1版本下
其实这个过程一点都轻松,可以说满满的一掬心酸泪。
有的朋友问,为什么要升级啊,是啊,为什么要升级呢??
是的,为什么要升级,哈哈哈哈哈哈哈,为什么要升级??哈哈。
都是程序员,这个笑话就不多提了,谁不比谁聪明多少!
---------------------------------------------------------------------------------------------------------------
我的劝告,如果可以,最好跟几个朋友一起干,一个人得累死,就像我这样的!
真是很累,你得面对无数次程序崩溃,电脑系统蓝屏等等
最要命的都是字符串,以前那种直接发送字符串方式已经不行了,不管你填充入内存或者直接发送,都不行,你得面对各种各样的乱码,然后程序崩溃!由于数据类型相当复杂,而且让人无奈,你想想人物数据结构有多么复杂吧。
里面成员变量嵌套各种数据结构,字符串类型的,布尔类型的,啥都有,确实吓死人,不说传输了,就算是保存,你都不敢完全肯定不会出错。
花在网络通讯方面的时间是最多的,因为得不到正确的结果,所以一次次改变代码函数,一次次测试,最终才解决掉。
真是悲催,以前的都是采用直接发送字符串的方式,确实很写意轻松,现在新编译器下,说真的,我感觉对字符串处理还不是很理想。当前程序下,各种字符串填充内存块,拷贝是没有任何问题的,但是不能动,哪怕一点点,就像M2跟网关通讯那样,后面拼接了内存,最后的结果,出现大量的乱码和掉包。
其实这些都是以前不严格的做法造成的。
说真的,那些代码很难保证程序的稳定性,尤其是一些设置参数,几乎是心血来潮就各种写,各种作,这里一套,那里一套,还有一个全局的的,自己也来一套,之后,到底谁改变了谁,天知道。这样玩意能稳定,去,算了吧。
整套程序要稳定,第一就是,设置参数必须统一。这没有什么好说。
暂时这样吧。
转载于:https://www.cnblogs.com/GameDelphi/p/7761494.html
关于引擎代码从Delphi 2007 升级至Delphi 10.1的一些历程相关推荐
- 选择 Delphi 2007 ( CodeGear Delphi 2007 for Win32 Version 11.0.2837.9583 ) 的理由
选择 Delphi 2007 ( CodeGear Delphi 2007 for Win32 Version 11.0.2837.9583 ) 的理由 我不喜欢用InstallRite的全自动安装包 ...
- Delphi 2007 代码补全、语句提示的快捷键是什么?
为了帮助网友解决"Delphi 2007 代码补全.语句提"相关的问题,中国学网通过互联网对"Delphi 2007 代码补全.语句提"相关的解决方案进行了整理 ...
- Delphi 2007体验!
Delphi 2007体验! baidu 内容摘要:CodeGear(From Borland) 公司公布了最新的Delphi 2007 For Win32版本号.作为一个 Delphi 的使用者,第 ...
- Delphi 2007 体验
Delphi 2007 体验 作者:netrobo CodeGear(From Borland) 公司发布了最新的Delphi 2007 For Win32版本.作为一个 Delphi 的使用者,第一 ...
- DELPHI - Delphi 2007 已内部支持 GIF 动画了
DELPHI - Delphi 2007 已内部支持 GIF 动画了 以前要在 Delphi 中显示 GIF 动画,一种办法是使用第三方组件,别一种方法就是使用 WebBrowser 组件.在 Del ...
- CodeGear RadStudio Delphi 2007 Delphi2009 最新破解补丁集
CodeGear RadStudio Delphi 2007 Delphi2009 最新破解补丁集
- CodeGear开发者日投影片和Delphi 2007 For Win32范例录像
CodeGear开发者日投影片和Delphi 2007 For Win32范例录像 我提供了CodeGear开发者日PowerPoint投影片以及两个Delphi 2007 For Win32范例录像 ...
- Unigui is compiled with:CodeGear™ Delphi® 2007 for Win32® R2 Version 11.0.2902.10471
Unigui is compiled with: CodeGear™ Delphi® 2007 for Win32® R2 Version 11.0.2902.10471 转载于:https://ww ...
- delphi 2007 安装提示Invalid Serial Number 超强解决办法
delphi 2007 安装提示Invalid Serial Number 超强解决办法 安装前提是你已经下载了Delphi 2007 for Win32的ISO. Delphi 2007根据不 ...
- Delphi 2007 “配置系统未能初始化” 错误处理
Delphi 2007 无法进入 Tools –> Options 选项界面,报: --------- Error --------- [color=red]配置系统未能初始化.[/color] ...
最新文章
- pd 生成mysql 脚本_PowerDesigner 如何生成数据库更新脚本
- mysql 一主一备_Mysql一个主一备
- PHP代码20个实用技巧(转)
- linux16.04下安装Clion2019.2记录以及C++代码运行
- 风控人必知必会的征信知识
- BZOJ 3685 普通van Emde Boas树 权值线段树(zkw)
- 「leetcode」654.最大二叉树(详解)
- 懒人分析jQuery源码
- WPS2012专业版序列号
- 【教程】CoreAVC+Haali安装及设置简易教程(KMPlayer)(4)
- 数字证书、CA、CA证书,傻傻分不清楚?这一篇看懂
- 北京程序员平均工资达2万!你拖后腿了吗?
- 根据题目完成以下50道SQL语句
- 利用开源工具搭一套汉英翻译系统(二):词对齐
- [原创]windows server 2012 AD架构 试验 系列 – 17管理用户AD帐号
- 基于jQuery发射弹幕的一个小案例
- mpu6050六轴传感器msp430驱动程序
- 20220610开发出jpgtotxt和jpgtopdf以及pdftojpg工具
- 评估回归模型的指标:MSE、RMSE、MAE、R2、偏差和方差
- BAT卖不动「医疗云」:医院逃离、山头林立、行有行规
热门文章
- 柱状图多维条形图vue_使用D3.js+Vue实现一个简单的柱形图
- python编辑快速上手_Python编程如何快速上手,答案在这里
- java栈链_Java实现链栈
- python编程题字符串的美化_Python编程题15--RGB字符串排序
- 导航栏html_html操作和思考(二):统一导航栏文字高度的方法
- 如何用maven创建java项目_Maven创建Java项目
- mongodb php存储日志,laravel 框架使用mongodb 保存日志
- OSI与TCP/IP各层的结构与功能及协议
- Java中VO/DTO/DO/PO/POJO/BO/DAO概念及其区别
- 一个元素调用css3动画 fixed元素会微抖动