« 不太精准的时钟 | 返回首页 | C 有 C 的规则 »

脏矩形演示 demo

上个世纪,我在个人主页上发布了风魂。2000 年的时候,我给它加上了脏矩形的支持。之后,就再也没有发布新的版本。

实际上,我经历了好几个游戏项目后,那么久远的代码已经被抛弃不用,但是由于工作原因,新的代码没能公开。现在回首那些老代码,居然发现如此的丑陋不堪。

不过,一些思路还是可以保留下来使用的,其中之一就是脏矩形技术。

早就想用文字写写,后来在写《游戏之旅--我的编程感悟》的时候,总算如愿。遗憾的是,当初我计划为第八章专门配一个 demo 代码,时间和精力的原因没有完成。

这个周末,出于一些考虑,我花了整整一个晚上的时间终于完成了这个 demo 。我想不能太苛求 5,6 个小时内到底能写出多少东西。不过我尽力把它写的好一点,清晰一点。而且在 C 和 C++ 之间,我选择了 C 。这是受最近两年思想的一些变化所影响,向 C 回归是我个人的一些变化。

demo 之所有叫 demo ,是因为它离实用还很远。只是为了说明方法。但是我相信,还是可以在此基础上做的更加完善的。

我把它们贴在了个人空间 里,脏矩形演示 demo 。如果你需要使用这些代码,请留意 wiki 上的版本更新记录,最新的版本一般会有一些 bugfix 。看代码之前,有一些临时组织的 FAQ 可以阅读。这个 demo 并没有追求任何视觉的效果,表象非常的简单。可能,有些代码值得一读是唯一的价值吧。

TrackBack

链入链接:脏矩形演示 demo:

» 10佳技术Blog from 数学小子的专栏
10佳技术Blog [Read More]

Comments

终于读懂了云风大哥的代码,谢谢分享。
我觉得那本书不错,你是否能结合您目前的感悟和技术的发展,出个第二版呢?
struct canvas *c=(struct canvas *)malloc( sizeof(struct canvas)-sizeof(struct canvas_block)+ sizeof(struct canvas_block)*(nw*nh) ); =========== 这段代码这么malloc的目的就是为了让canvas和canvas_block位于一块连续的内存上,是这样吗??? 在这里贴代码讨论,是不是不是很受欢迎啊?
终于读懂你的代码了!! 谢谢分享!!!!!!!!!
前段时间看QT,发现他的Canvas类和你的很像
一样的,但是遮挡的优化,还有对滚屏的优化没有做。
请问这个demo和风魂++中脏矩形的思想是一样的么?
支持云风的做法! 一直以为云风没有发布关于脏矩形的最新代码(除开风魂++那个难吃的代码:)),然而今天上google搜索“脏矩形”,竟然有!简介的实现,优美的风格,虽然代码不多,足够我这个新手学习了。 云风,你是我的偶像!
我想问一下为什么显存内部之间的数据移动很快 而内存到显存就很慢呢? 是cpu和显存之间有锁存寄存器造成的吗? 还有就是blit()有多快呢? 如果自己重写它会不会有好的收获呢? 不好意思,一次问了这么多 呵呵
如果硬要说 GDI 比较低效的话,那么应该弄清楚到底机器在 GDI 上或者 DirectDraw 上操作做了些什么,是什么导致了速度差别。单从 Direct 这个单词来谈效率是不成立的。 ps. 这些代码经过改进后,现在用于我们的 3d engine 中。我认为以这为基础可以得到一套很好的 UI 解决方案。
谢谢. 以前写2D最后一步用的是 DDraw . 现在已经改写3D 程序, 没有低档机器测试GDI 实现滚屏的效率了. 有时候也会怀念一下2D 的算法
几乎没有区别,因为这个是简单任务,即使 GDI 要慢一些,自然有它慢的理由。设计者不可能估计设计的低效,况且 GDI 和 DirectDraw 都是存在于 Windows 平台上。 至于 DirectX , 它可以提供直接的显存控制。当我们实现滚屏的时候会有些用处。
请教一下. 2D引擎中, 最后一步的上图用 directDraw 和 GDI, 哪个更好一些?
最近喜欢用 C 道理很简单 :) 其实任何项目经过合理的架构都可以清晰漂亮的用 C 写出来。C++ 本质上是提供了许多语法糖而已。在理解了 C++ 后,如果经常用 C 去写东西,C++ 的功力涨的更快。那些语法糖将用的更好。
有兴趣研究的同学可以把 WM_PAINT 里的 canvas_redraw 调用去掉,然后最小化一下窗口。就可以方便的看到,每帧刷新并没有刷新整个屏幕了。 整个代码有很多优化的余地,但是那样就会使篇幅拉的很长了。
云风大哥,能否请你就这些年来在C和C++之间摇摆写一篇BLOG,给大家介绍一下你的一些想法?我对这个比较感兴趣,很想知道你说的“受最近两年个人思想的一些变化所影响,向 C 回归是我个人的一些变化”倒底是为什么,谢谢!
代码确实很短,但是我却无法理解。。。。汗!
看了文章,真的有些感动。为了这种负负责的态度,我就要说一声好
同意2楼观点
新东西其实一直在贴啊,只是没有贴出代码来而已。估计今年做的代码,日后想贴出来至少等三年吧。
多谢云风大哥 太感谢啦,要好好研究研究
发现云风总是在用C和C++之间左右摇摆,每一次对C/C++的理解都更深刻了。不过怎么写来写去还是5、6年前的技术啊,贴点新鲜的吧。
楼上的,中国都想你这样的话,完蛋了!看看有多少中国出来的垃圾,都是发现一点东西当宝贝的! 支持云风的做法,没有公开就没有进步!
云风大哥技术的东西还是别暴露太多啊,我希望网易的游戏领先 网易的FANS留!

Post a comment

非这个主题相关的留言请到:留言本