播放动画的两种方法

        在大部分设计的游戏中播放动画的方法有两种:一种是直接播放影片文件(如AVI和MPEG)文件,常用在游戏的片头与片尾;另一种则是游戏时利用连续贴图的方式,制作动画的效果。事实上游戏程序本身几乎都不得是以无限循环的方式不断地在游戏窗口中进行画面重绘的操作,即使用画面没有任何变化,这个重绘的操作还是不断进行的,一直到玩家选择结束游戏为止。

        进行连续的播放图片,一种是得用定时器,另一个是重写消息循环,又称为游戏循环。

1:定时器:UINT SetTimer(HWND   接收定时器消息的窗口 ,UINT    定时器代号(必唯一),

                                             UINT   时间间隔,      TIMERPROC    处理响应函数); 如:SetTimer(1,500,NULL);

删除定时器用KillTimer(int 定时器代号);

2:游戏循环:

while(msg.message!=WM_QUIT)

{

         if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))     //检测消息

          {

                        TranslateMessage(&msg);   DispatchMessage(&msg);

           }

         else

            {

                      tNow=GetTickCount();    //取得系统开始到目前经过的时间

                      if(tNow-tPre>=40)   MyPaint(hdc);//tPre为记录前次绘图时间。MyPaint(hdc)为重绘函数

           }

}

Note:

(1);使用PeekMessage()函数来检测目前是否有要处理的消息,若检测到消息(包含WM—QUIT消息)则会返回一个非零值,否则返回零;

(2):不能用GetMessage代替PeekMessage,因为GetMessage只有在取得WM—QUIT消息的时候才返回零,其他的时候则返回非零或"-1"(发生错误时);

(3):if(tNow-tPre>=40)   MyPaint(hdc);这里设定40个单位的原因是,因为每隔40个单位进行一次绘图操作那么1秒钟大约重绘窗口1000/40=25次,刚好可以达到期望值.要使玩家感觉不到延迟的状况,基本上游戏画面必须在一秒钟之内至少更新25次以上.由于循环的运行速度远比定时器发出时间信号来得快,因此使用游戏循环可以更精确的控制程序运行速度并提高每秒钟画面重画的次数.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值