首页
社区
课程
招聘
[旧帖] 求教,植物大战僵尸的动画是怎么完成的? 0.00雪花
发表于: 2016-5-18 23:51 4709

[旧帖] 求教,植物大战僵尸的动画是怎么完成的? 0.00雪花

2016-5-18 23:51
4709
最近在学习DDraw,虽然已经很老了,但感觉先学它,再学D3D,也是会用好处的。
      学习之余,就对植物大战僵尸这款游戏很感兴趣。然后,就想着一款的游戏的每个怪物的动画是怎么实现的呢?是不是跟那些书上的DDraw实现的游戏代码一个样呢?
      书上教的都是用Blt来实现游戏绘图的。然后,我就想当然的以为,植物大战僵尸也是通过Blt函数一帧一帧的把僵尸的每个动作Blt到Surface上来实现僵尸的动画的。于是,我去Hook了Blt函数,来仔细观察效果。
      结果,非常遗憾,游戏居然是直接把整张图都Blt到后台缓存的。而这整图是早已经在Blt之前,就已经把所有该绘制的都绘制上去了。
      一时间,我就纳闷了,怎么回事?书上不是说,是用Blt函数来绘图,然后Filp来实现精灵动画的吗?这游戏怎么不按常理出牌啊。
      没有找到答案的我,又想着是不是用的BltFast,结果发现游戏压根就用过这个函数。
      于是,我又在系统函数BitBlt上下断点,发现也同样是不存在过调用情况。
      思来想去,实在是想不通到底是为什么。
      我这人不喜欢遇到问题就半途而废,就爱打破沙锅问到底,求各位帮忙解答以下。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
播放图片?
2016-5-18 23:57
0
雪    币: 1
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
就是僵尸是怎么动起来的?用什么函数来实现的。
2016-5-19 00:17
0
雪    币: 438
活跃值: (183)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
绘图只有一个函数,不可能没有使用。
2016-5-19 07:20
0
雪    币: 1
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
的确是使用了。但是跟你想象的不一样的。本来以为是先把背景图给绘制上去,再把僵尸什么的绘制上去,从而组合成了一个游戏画面。但是,事实是人家并没有这么去做。当它调用Blt前,已经把僵尸什么的都绘制上去了。问题是,它是用什么函数把僵尸给绘制上去的。
2016-5-19 08:59
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我看过GPU程序的编写,每一帧都是临时建模显卡绘制产生的。估计僵尸也是这样的。
2016-5-19 09:58
0
雪    币: 488
活跃值: (3149)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
7
Blt是GDI的绘图函数。还有其他的比如GDI+,Direct,OpenGL等应该都不经过Blt的吧
2016-5-19 10:46
0
雪    币: 1
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
BitBlt才是GDI的函数,DDraw里才游Blt,虽然它们功能相似,但是为了区分,微软在命名时是作了区别的。
2016-5-19 11:48
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
没用过DDraw,不过我觉得不是一帧一帧画上去的,应该僵尸的整个动作是个动画,类似于gif图片,把整个动画直接加载上去,僵尸每走一步只是前移整个动画的位置
2016-5-19 15:58
0
雪    币: 1
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
然而,当你去看游戏的资源包时会发现,那不是gif,一个僵尸的每个动作,都是分别为一张图片。
2016-5-19 16:54
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
本身就是一张动图,只需要移动图片就可以了。
2016-5-25 16:17
0
游客
登录 | 注册 方可回帖
返回
//