随笔分类 -  游戏程序

1 2 下一页
关于自制的思维导图的一些想法
摘要:先看图再啰嗦:花了不少时间去弄。 很久以来就想弄一个能够快速实现自己想法的逻辑分析系统结构软件。相信很多人都在不得已的情况下,采用什么Excel 、Word,或者其他类型的思维导图之类的玩意。其实这些玩意功能是足够强悍的,但是我就一感觉:麻烦,而且压根达不到我想要的速度和方便。想了很久了,都因为太忙 阅读全文
posted @ 2018-05-19 13:30 一笑如风 阅读(609) 评论(0) 推荐(0)
匆匆几年过去,想写点什么呢?
摘要:在这里给一些朋友致歉: 因为各种原因,很久没有关注博客了,所以大家给我发的信息都没有及时回复,真是不好意思! 经历了各种蹉跎,想不到今天终于回归。 能够说的东西不多,废话一大堆,就当是废话吧。 这几年来,相信市场的变化还是比较大的,至少目前来说,各种引擎层出不穷,也参差不齐。 我看了几份开源的代码, 阅读全文
posted @ 2017-10-31 13:14 一笑如风 阅读(380) 评论(0) 推荐(0)
高级性能服务器编程模型【IOCP完成端口】开发实现【三】
摘要:一开始学习完成端口编程的时候,我看的资料是小猪的关于完成端口的教程和源代码。 好在,我还有那么一点点C++的底子,不是很好,勉强看得懂吧。 其实看得懂不是IOCP完成端口的具体原理,而是这些C++代码结构逻辑而已。 很惨,对吧。 后来我采用Delphi的代码结构来做,说真的,当时一样是一塌糊涂,哈哈。 很多人说,IOCP完成端口被神化了,其实这个很正常啊,不懂的时候,看啥都是神秘的。 其实小猪的这个代码很有用,他的执行测试Demo是我见到的最快的程序。 Delphi编码的程序,很多人的程序我测试过了,反应确实没有他快。客户端发送几百条数据,一边发,服务端一边不断地接收刷新数据... 阅读全文
posted @ 2012-08-30 00:10 一笑如风 阅读(3862) 评论(0) 推荐(0)
高级性能服务器编程模型【IOCP完成端口】开发实现【二】
摘要:因为需要参考各种资料,所以还是需要一些时间才能够做好的。 而且在开发中,还会面对一些不得不仔细去解决的问题。 我打算尽量从Win32API的基础上面进行开发,能够不使用Delphi封装的类就不用,任何类都是无法避免多余的开销,而我们往往只使用一两个功能就付出那么大的代价,是否值得???? 当然,别谈跨平台了,在中国,还是老老实实在Windows系统上面搞开发吧,而且服务器编程跟客户端没有直接的关系,客户端,你仍然可以采用任何语言进行开发,或者只使用JSocket的客户端控件就行。当然,如果时间允许,我们也可以自己封装一个,其实都差不多的,没有见得好到那里去。 客户端跟服务端不同,不... 阅读全文
posted @ 2012-08-27 16:51 一笑如风 阅读(1984) 评论(2) 推荐(0)
高级性能服务器编程模型【IOCP完成端口】开发实现【一】
摘要:本来打算先完成一些汇编上的事情,再等以后时间充足的时候,再搞的。 但是我看着那些源代码,心理确实不是滋味。 因为不管你是现在做或者以后做,都必须面对这些要命的问题。 我不知道大家看着下面这个结构,心理是什么感想,我只知道要改的话,比去完成一个IOCP完成端口控件所需要的时间还要多得多。 1 TGateInfo = record 2 Socket: TCustomWinSocket;3 sIPaddr: string; 4 sReceiveMsg: string;5 UserList: TList;6 dwKeepAliveTick: Lo... 阅读全文
posted @ 2012-08-26 22:17 一笑如风 阅读(2759) 评论(1) 推荐(0)
探讨【IGE】的源代码【六】,承接【五】,内存池管理。
摘要:上篇,我们提到了内存创建和释放带给长时间运行的服务器性能的损害问题。 当然还可能增加了CPU的相当的开销。 那么如何解决这个问题呢。 在这里只做一些讨论,具体实现,是你自己的事情。 到目前为止,我们能够做的都是管理一个内存池。 一开始,我们先分配好一批内存,把这批内存标注为空闲。 在客户端连接入来的时候,从空闲链表里面取第一个结构指针,填充内存。 Delete(0);删除空闲链表索引,是删除,不是释放,这个要记住。 然后使用一个正在使用链表来管理已经被调用的内存,使用ADD操作。 那么跟客户端断开连接后,将该释放的或者需要置Nil的对象处理之后。 从正在使用的链表删除该... 阅读全文
posted @ 2012-08-25 15:19 一笑如风 阅读(721) 评论(0) 推荐(0)
探讨【IGE】的源代码【五】。
摘要:这样做,有没有问题???? TGateInfo = record Socket: TCustomWinSocket; sIPaddr: string; sReceiveMsg: string; UserList: TList; dwKeepAliveTick: LongWord; end; pTGateInfo = ^TGateInfo; 上面正常的信息结构,当然里面包含了一个链表对象,呵呵。procedure TFrmMain.GSocketClientConnect(Sender: TObject; Socket: TCustomWi... 阅读全文
posted @ 2012-08-24 22:07 一笑如风 阅读(729) 评论(0) 推荐(0)
探讨【IGE】的源代码【四】。
摘要:是不是一定需要安装DB2000这个数据库?? 最初我也不太肯定,因为我还没有看源代码。 现在看了,完全可以不必安装和配置这个玩意了,没有必要。 看下面就应该知道没有这个必要—— 1 //加载物品数据 2 function TFrmDBSrv.LoadItemsDB(): Integer; 3 var 4 i, Idx: Integer; 5 StdItem: pTStdItem; 6 nRecordCount: Integer; 7 resourcestring 8 sSQLString = 'select * from StdItems'; 9 begin10 ... 阅读全文
posted @ 2012-08-14 22:33 一笑如风 阅读(940) 评论(2) 推荐(0)
探讨【IGE】的源代码【三】。
摘要:看了源代码,相信大家都知道IGE的源代码出自飞尔早期泄露的源代码。 说真的,这些混乱和不合理以及低水准的编程水平和方式不是韩国程序员的错。跟他们没有关系。 服务端的程序尽可能减少不必要的开销,哪有什么东西都挤到一起的?? 就拿服务器启动器来说,配置项目以及开区清理这些,不应该放在主窗体上面进行处理。 看到无尽长的代码挤在一份主执行文件里面,你的感受会如何?? 架构结构一定要合理,为什么,因为合理就等于是合理分配资源。 为什么不应该在主窗体文件里面处理这些东西,因为我们知道,配置文件一旦生成,服务器启动后,这些东西就没有用了。 可是它们这些超大量的控件和各种代码的开销仍然是不可... 阅读全文
posted @ 2012-08-13 08:13 一笑如风 阅读(980) 评论(1) 推荐(0)
探讨【IGE】的源代码【二】。
摘要:首先开始服务端的源代码重新架构。 为什么选择IGE源代码是有原因的,或者我认为他的源代码结构不是很混乱吧。 毕竟不是全部照抄,只需要了解它的执行逻辑结构,然后重新按照自己的想法来实现。 这个很重要,只要看下去就会明白。 服务器有几个需要注意的地方: 第一、内存碎片,这个需要注意,否则服务器会在长时间运行后,性能会越来越差。 1、内存碎片的产生多出现在内存的不断分配和释放上面。 2、对象的创建和析构也会产生内存碎片。 3、结构化的参数——这个是听说的,具体没有试验。 第二、内存的使用,这个是这篇文章的重点。 。。。。。。。。。。。。。。。。。 看了服务端... 阅读全文
posted @ 2012-08-11 16:38 一笑如风 阅读(1020) 评论(0) 推荐(0)
探讨【IGE】的源代码【一】。
摘要:这段时间看了不少的传奇的源代码。 感觉一个字,烂,不是一般的烂。 我相信大家都知道。 同时大家肯定明白,如果重新优化和架构,效率肯定要比原来的代码要高很多很多倍。 首先说一个地方,virtual和dynamic,虚方法和动态方法。显然代码里面大部分都是采用动态方法,这个要命啊,慢啊。 关于虚方法和动态方法的最大区别是,虚方法速度快,比动态方法快多少倍未知。缺点是费空间。动态方法费时间省空间。 一般我们是不经常调用而且速度不是居于首位的时候,我们采用动态方法。相反经常调用频繁,而且速度居于首位的,我们采用虚方法。 这些是毫不迟疑的。 但是那些(大家明白的源代码)为什么采用动态... 阅读全文
posted @ 2012-08-04 18:30 一笑如风 阅读(1111) 评论(1) 推荐(0)
专属自己的二维游戏引擎【九】
摘要:突然发现有个东西一直没有注意,挺搞笑的。 居然发现还没有自己的声音模块,哈哈~ OK,我们看看有什么是我们可以使用的: FMOD、Bass、SquallSound——好像这些都可以使用吧。 当然Bass听说是收费,FMOD如果开发为商业使用也需要交纳100美元左右吧。 当然钱不算多,只是有个最主要的问题是,跨国交费对于我们这些没有任何经验的人来说,简直就是一种最大的折磨。 SquallSound咋样,哦,我讨厌任何时候带任何不需要的DLL,有这种怪癖的人会不会多?呵呵。 总之,无论是免费的还是收费的,都需要带一个DLL,我很讨厌这样做。 好吧,我自己来做声音模块总可以了吧。... 阅读全文
posted @ 2012-07-24 13:25 一笑如风 阅读(862) 评论(0) 推荐(0)
专属自己的二维游戏引擎【八】
摘要:经过一段时间的奋战,终于成功架构出一款针对二维游戏开发的D3D绘图引擎。 并且集成为一组控件安装到IDE上面,方便调用。 制作开发二维游戏可以完全告别DDRAW7和D3D8.0的时代。 其实还是要感谢HGE的作者,虽然我的代码结构只使用了很少HGE方面的东西,但是HGE不失作为一种很好的学习和参考资料。 其实早在采用Delphi开发之前,我就已经使用C++做过一些这方面的例子,说真的,如果没有最初的纯D3DAPI架设的经验。。 那么要成功架构出一款绘图引擎是不可能的。 就好像你要修改HGE那些代码结构一样,如果没有D3D的基础,显然是无法了解那些地方是需要修改一样。 这些不重... 阅读全文
posted @ 2012-07-21 19:05 一笑如风 阅读(744) 评论(0) 推荐(0)
专属自己的二维游戏引擎【七】
摘要:也许我们应该开始分析一些代码结构问题了,而不是老是啰嗦无用的废话了。 先分析一下,在D3D里面我们应该如何地完美地裁剪纹理呢。 在GDI里面,我们可以采用矩形复制的方式从一张图片里面截取一部分需要的图片,这里需要有两个画布对象。 但是就像我以前说过的,既然已经采用D3DAPI来制作引擎,就应该尽量采用原生的D3D方式来解决问题。 我们先分析HGE的代码,它的代码操作很简单,但是很多地方又显得多余。constructor THGESprite.Create(const Texture: ITexture; const TexX, 纹理开始的X坐标位置,就是截取开始的地方的坐标... 阅读全文
posted @ 2012-07-15 15:13 一笑如风 阅读(719) 评论(0) 推荐(0)
专属自己的二维游戏引擎【六】
摘要:GUI部分已经完成了几个控件。 GUI控件在设计期完全可视化设计,同时添加了一个属性用于在设计期就可以控制该控件显示和隐藏,避免窗体上面太多的控件影响设计。 听朋友说,设计期可视化会把界面图片信息保存到窗体Dfm里面,会被反编译看到这些信息。 后来考虑了一下,调整了一下代码结构。 在设计期的界面信息调用的是随便定义的图片文件包路径,比如D、E、F或者某个硬盘里面的文件路径。 就算通过反编译也只能够看到这些包含绝对路径的文件信息而已。 而运行后肯定读取客户端数据包所在的数据路径,读取的文件名称和索引值等肯定不同。这样就区分开来了。 其实有没有必要这样做????????? 其实... 阅读全文
posted @ 2012-07-13 14:44 一笑如风 阅读(633) 评论(0) 推荐(0)
专属自己的二维游戏引擎【五】
摘要:这一节到了GUI部分。 采用继承Delphi控件祖类的方式来创建GUI控件相对来说还是比较便利的。 现在因为是直接在默认的From上面绘图,所以也可以调用IDE里面的控件。 但是我们需要绘制的是PS好的图片作为GUI的外观,显然就需要自定义自己的控件类型。 说到这方面,大家都清楚,字体绘制永远是一种难言的伤痛。 中文毕竟不是英文,直到目前,很难找到一种不影响游戏性能的中文显示解决方案。 但是我觉得不管你怎么操作,实际上,游戏绘制的永远是图片。 于是,是不是可以这样操作: 角色和怪物的名称文字采用已经制作好的常用字体图片文件来绘制,这样不会影响游戏性能。 GUI控件的字体直... 阅读全文
posted @ 2012-07-04 19:26 一笑如风 阅读(650) 评论(0) 推荐(0)
专属自己的二维游戏引擎【四】
摘要:引擎应该包含这样的模块结构: 底层的绘图模块,关于这个,我是这样理解的: 合理的做法应该是:绘图模块只需要负责把表现的图元和纹理绘制出来就好。而不需要关心逻辑方面的处理。 比如:什么时候画,画那部分,画在那里等等,这里应该留给应用层来管理。 就是说,应用层什么时候给绘图底层填充数据,传入什么坐标参数,纹理宽高参数等,这个时候渲染就按照给定的定时器的速率一直在渲染渲染。 数据更新了,渲染新的数据,否则在一定的速率上面渲染旧的数据。旧的数据在显示内存里面,只需要占用很少的CPU时间片来渲染缓存并显示。 我看了一些人的做法是逻辑跟底层绘图彼此纠葛在一起,使得引擎结构相当复杂,其实个人... 阅读全文
posted @ 2012-07-02 14:27 一笑如风 阅读(1151) 评论(1) 推荐(0)
专属自己的二维游戏引擎【三】
摘要:引擎跑起来很关键,初步架构成功! 目前还是采用非可视化控件设计,这样方便调整测试代码。有个打算弄成像Delphi_X那样可以在Form上面拉出一个可视化的窗体。 这样其实就可以替代IDE带的那个Image控件,完全可以应用D3D9的硬件加速来制作应用了。只是这样应用于游戏的话,效率未知。 接下来需要处理 Alpha混合测试,这个很重要,游戏特效等离不开; 碰撞、目标选择等。 阅读全文
posted @ 2012-06-29 18:13 一笑如风 阅读(1008) 评论(0) 推荐(0)
专属自己的二维游戏引擎【二】
摘要:我给客户制作美术素材从来没有崩溃过,最近给一个客户制作二维游戏素材的时候就直接崩溃了。 次时代模型的流程虽然麻烦,但是我还没有见过比它更麻烦千倍的东西,这次算是见识了。 韩国的泡菜确实比较不太好吃。你懂的,哈哈~~拜拜。 我喜欢Delphi编程,很多人认为它很容易学,事实上,真正要精通它,不会比学习C++要轻松几何。 很多说Delphi不好的人,因为这些人学习Delphi达到一个瓶颈后就放弃了。这些很正常,不值得我们去探讨的。萝卜青菜各有所爱。 我不喜欢C++,虽然最早学习的是C++。如果我不接触Delphi,那么现在使用的绝对是C++。但是我还是愿意去学习它。 任何人做任何事... 阅读全文
posted @ 2012-06-28 15:10 一笑如风 阅读(2908) 评论(0) 推荐(0)
专属自己的二维游戏引擎【一】
摘要:【个人想法:20120628】 显然大家都有自己的梦想,我的梦想就简单了,做专属自己的游戏。 于是问题来了,我们需要一个游戏引擎。一个自己熟悉运行原理和过程的程序模块。 也许很多人都会问,现在啥时代了,还二维游戏。是的,现在正是二维游戏成熟期。 我不喜欢现在网上的任何三维网络游戏,因为那些东西根本就不成熟。 也许你要问,现在难道不是三维游戏的成熟期吗,是的,的确不是,这些所谓的三维技术根本不成熟。 次时代技术展现不错啊,的确不错,但是当你亲身去体念一下次时代模型和动作等制作流程后,你会说:是的,这些东西很垃圾! 但是这些东西你是无法跟很多人说的,因为他们没有这种亲身经历。 ... 阅读全文
posted @ 2012-06-28 13:58 一笑如风 阅读(1638) 评论(0) 推荐(0)

1 2 下一页