« 不太精准的时钟 | 返回首页 | 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

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