- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用标准GDI实现游戏品质的动画系统
使用标准GDI实现游戏品质的动画系统
燕良 2002年1月
/
前言 2
GDI基础 3
绘制一个位图(Bitmap)对象 3
常用像素格式 4
Windows下的基本动画系统 4
动画驱动方式 4
播放动画 5
消除闪烁 6
透明色(color key)处理 7
Alpha混合 9
读取JPEG,GIF文件 10
子窗口管理 12
进阶技巧--使用DIB 14
像素操作 14
RLE压缩 15
参考 15
华山论键 15
其它类库 16
前言
说到实现游戏品质的动画,很多人会立刻想到DirectX,没错DirectDraw很强大,但是并不是必须用DirectDraw才行。动画后面的理论和技巧都是一样的,这和末端使用什么API没有太大关系(如果那API不是太~~慢的话)。就笔者实现的NewImage Lib的测试结果,内部所有像素数据的存储和运算都纯软件实现,最后一步输出到屏幕使用GDI的性能比DirectDraw低不到10%,在Window9X系统上要低20%左右,这对很多软件来说是绝对可以接受的。
现在应用程序界面越做越华丽,除了支持SKIN外,很多人都想在程序中加入一些例如sprite动画这种原本用在游戏上的技术,因为这原因引入DirectX API,显然是不值得的(况且DX版本升级频繁,DX8中已经用DirectGraphic取代了DirectDraw)。本文将以笔者使用标准GDI函数实现的商业游戏为例,带你进入高品质2D动画编程领域,并且保证其设备无关性。
本文假设读者有C/C++语言知识,Windows编程基础,GDI基本概念。下面我将主要讲述我在过去工作中积累的经验和一些技巧,但是将不讲解以上基本概念。读者最好有MFC基础,本文给出的代码将主要使用MFC,但是其中的道理却不限于MFC。
GDI基础
绘制一个位图(Bitmap)对象
GDI的所有操作都是在DC(device context)上进行的,所以首先你应该有DC的概念,如果你对DC还不了解,现在就去翻一翻Windows编程的书吧。
首先我们要Load一个Bitmap对象,使用Win32 API可以写成这样:
//从资源Load一个位图,如果从文件load的话,可以使用::LoadImage()
HBITMAP hbmp=::LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_MYBMP));
如果使用MFC可以这样写:
CBitmap bmp;
Bmp.LoadBitmap(IDB_MYBMP);
想把这个位图对象绘制到窗口上就要先得到窗口的DC,然后对这个DC操作。请留意创建MemoryDC的代码,后面会用到。
Win32 API的版本:
//假设位图大小为100*100像素
//假设hwnd是要绘制的窗口的HANDLE
HDC hwnddc=::GetDC(hwnd);
HDC memdc=::CreateCompatibleDC(hwnddc);
HBITMAP oldbmp=::SelectObject(memdc,hbmp);
::BitBlt(hwnddc,0,0,100,100,memdc,0,0,SRCCOPY);
if(oldbmp)
::SelectObject(memdc,oldbmp);
DeleteDC(memdc);
::ReleaseDC(hwnd,hwnddc);
MFC版本:
//假设是在一个CWnd派生类的成员函数中
CClientDC dc(this);
CDC memdc;
memdc.CreateCompatibleDC(dc);
CBitmap *oldbmp=memdc.SelectObject(bmp);
dc.BitBlt(0,0,100,100,memdc,0,0,SRCCOPY);
if(oldbmp)
memdc.SelectObject(oldbmp);
也可以这样:
CClientDC dc(this);
dc.DrawState(CPoint(0,0),CSize(100,100),bmp,DST_BITMAP);
基本的代码就是这样,当然有更多的API可以用,这就要看你自己的了。(
常用像素格式
要进行图像编程的化对像素格式不了解似乎说不过去。我想应该有较多的人并不太了解,所以这里简要的介绍一下。
8bit 也叫做256色模式。每个像素占一个字节, 使用调色板。调色板实际上是一个颜色表,简单的讲就是,我们有256个油漆桶(因为像素的取值范围是
您可能关注的文档
- 体育教学设计.docx
- 体育教师专业知识考试考试题目和答案.doc
- 体育教师考试试题_及答案.doc
- 体育教师入编试题.doc
- 低电压治理典型技术方案(白皮书).docx
- 体育理论课作业答案(篮球).doc
- 体育馆工程基础施工方案.doc
- 体艺2+1活动方案.doc
- 住宅工程质量通病预防措施.doc
- 何凯文考研英语作文预测班辅导讲义.doc
- 2025年4-溴-2-硝基苯胺行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年碘化噻唑青胺行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年超声波口罩机行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年二乙基硒行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年可吸收导尿管行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年聚乙烯醇肉桂酸酯行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年广告印刷行业洞察报告及未来五至十年发展趋势预测报告.docx
- 吉林省长春市朝阳区长春外国语学校2024-2025学年高一下学期7月期末英语试题(含答案).docx
- 2025年超声波流量仪表行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年矿物铸件行业洞察报告及未来五至十年发展趋势预测报告.docx
最近下载
- 工业机器人安装与调试技术PPT(高职)全套全套教学课件.pptx VIP
- 2023年青海师范大学计算机科学与技术专业《计算机系统结构》科目期末试卷A(有答案).docx VIP
- 青海师范大学《算法设计与分析实验》2021-2022学年期末试卷.doc VIP
- 《甲状腺的超声检查》ppt课件.ppt VIP
- 甲状腺超声检查课件.ppt VIP
- 规范甲状腺超声检查培训课件.pptx VIP
- 青海师范大学《算法设计与分析》2022-2023学年期末试卷.doc VIP
- 创新思维与能力培养课件.ppt VIP
- 规范甲状腺超声检查.PPT VIP
- 青海师范大学《算法设计与分析》2021-2022学年期末试卷.doc VIP
文档评论(0)