- 1、本文档共88页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
四、游戏动画
游戏动画技巧;游戏动画;循环;基础动画显示;;定时器;;定时器的建立;例:建立定时器;窗口WM_TIMER响应;删除定时器;定时器动画例子;定时器动画例子;定时器动画例子;MyPaint (HDC hdc)
{
if (num == 7)
num = 0;
SelectObject(mdc,girl[num]);
BitBlt(hdc,0,0,600,450,mdc,0,0,SRCCOPY);
num++;
};定时器动画结果;定时器的优缺点;;游戏循环动画;循环动画;构建一个游戏循环;代码分析;如果消息队列里没有消息的时候不让Getmassage在Windows内部等待,就是说想充分利用程序的所有时间,就应该用peekmassage。
peekmessage是一个类似于Getmessage的函数,区别在于:
当消息队列里有消息的时候,Peekmessage取回消息,并在eax中返回非零值,
没有消息的时候它会直接返回,并在eax中返回零。;返回非零值的时候,程序检查消息是否是WM_QUIT:
是则结束消息循环,
不是则用标准流程处理消息;
返回零的时候,表示是空闲时间,程序就可以做其他工作了,
但插入做其他工作的代码执行时间不能太长,以不超过10ms为好,否则会影响正常的消息处理,使窗口的反应看起来很迟钝.
如果必须处理很长时间的工作,那么应该将它们分成很多小部分处理,以便有足够频率用Peekmessage来检查消息. ;peekmassage 比 Getmassage 多一个参数.这个参数表示在取回消息以后,对消息队列中的消息是否保留.
当这个参数是PM_REMOVE时,消息被取回的同时也被从消息队列里删除,
而用PM_NOREMOVE的时候,被取回的消息不会从消息队列中删除,函数相当于偷看了这条消息. ;TranslateMessage是用来把虚拟键消息转换为字符消息。这两个消息的附加参数(wParam和lParam)包含的是虚拟键代码和扫描码等信息,在程序中往往需要得到某个字符的ASCII码,
TranslateMessage这个函数就可以将WM_KEYDOWN和WM_ KEYUP消息的组合转换为一条WM_CHAR消息
并将转换后的新消息投递到调用线程的消息队列中。
也就是说TranslateMessage会发现消息里是否有字符键的消息,如果有字符键的消息,就会产生WM_CHAR消息,如果没有就会产生什么消息。;;游戏循环动画例子;游戏循环处理动画的优点;解决方法:;透明动画 ;透明动画;前景图和掩模图;单个恐龙动画例子;void MyPaint(HDC hdc)
{
if(num == 8) num = 0;
SelectObject(bufdc,bg); //在mdc上贴背景图
BitBlt(hdc,0,0,640,480,bufdc,0,0,SRCCOPY);
SelectObject(bufdc,dra); //在mdc上进行精灵的透明处理
BitBlt(hdc,x,y,95,99,bufdc,num*95,99,SRCAND);
BitBlt(hdc,x,y,95,99,bufdc,num*95,0,SRCPAINT);
tPre = GetTickCount(); //记录绘图时刻
num++;
x-=5; //计算下次贴图坐标
if(x=-95) x = 640;
};单个恐龙动画的结果;多个恐龙贴图;动画显示问题 ;贴图坐标修正;图片不规格;贴图坐标修正;贴图坐标修正;以阴影部分作为贴图的基准,在恐龙动作转而面向下时做贴图坐标的修正,使得第2次贴图时阴影部分能够与上一次重叠。(第2次贴图的左上角坐标与第1次相比稍微往右下方移动),这样的修正使得动画显示时视觉效果更好--采用Y坐标排序;贴图坐标修正;贴图坐标修正的缺点;贴图坐标修正;贴图坐标修正;排序贴图 ;假设现在有10只要进行贴图的恐龙图案。先把它存在一个数组之中。
从2D平面的远近角度来看,Y轴坐标比较小(在窗口画面较上方)的是比较远的物体。以恐龙的Y轴坐标(在排序中称为键值)来对恐龙数组由小到大进行排序,
结果:最后会使得Y轴坐标小的恐龙排在数组的前面,而进行画面贴图时则由数组从小到大一个一个进行处理,遮掩便可实现“远的物体先贴图”的目的了。;气泡排序;气泡排序的步骤;;;多个恐龙贴图;实现的效果;背景动画的设计;背景动画的设计;单一背景滚动;单一背景滚动;单一背景滚动;LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
文档评论(0)