游戏编程基础(三)GDI游戏动画基础

游戏中播放动画,简单来看可以分为:1.直接播放影音文件;2.利用连续贴图的方式,模拟动画效果。

Windows中可以使用定时器来实现连续贴图,定时器的使用固然简单和方便,如果稍微对windows系统及消息机制有些了解的话。就会发现,定时器其实是有很大限制。因此定时器只适用与小游戏或简单动画中。但是了解基本的东西,对于扩展和学习高级的技巧会有很大的帮助,因此我们要把最简单的原理搞懂。千里之行始于足下嚒.

1.首先需要准备几张连续动作的位图。

2.Windows定时器的使用

 这里提供一点小技巧,主要是针对美工不足的自学者:

①.提供图片素材的网站确实很多,但免费的不多(不是需要注册,就是冲各种币),这里提供两个免费素材网站

http://www.sucai86.com/sucaishow/allpic.asp?id=970&id2=25

http://www.easyicon.cn/

http://www.66rpg.com/tag.php?t=18

http://online.sccnn.com/

②.对于连续动作的图片,已经很难找到像上面我发的那种直接BMP的连续动作图了。不过我们可以在网上下载一些绿色版的gif提取软件,可以直接从gif(相对而言,gif动画满世界都是)中提取bmp图。我上面那个连续位图就是通过这个方式获取的。

③.关于之前的GDI透明位图的制作时,可能也很难找到现成的屏蔽图。当然各种制图软件都有办法修改。我这里提供一个稍微麻烦,但是相对而言简单的办法。

    用VS2010直接打开位图,使用板擦或者笔刷可以制作屏蔽图。对于小图,机器上又没有安装其他绘图软件,这个也是一个可行的方法。

首先在vs2010中打开bmp图

其次放大尺寸

 

 

最后用板擦或者笔刷擦除

 

关键代码:

//add by leo
HBITMAP	man[12];//位图数组,用于存放人物位图

HDC		mdc,hdc; //mdc为内存兼容DC,hdc用来存储窗口DC

int		num; //记录位图索引号

  hdc = GetDC(hWnd);
   mdc = CreateCompatibleDC(hdc);

   //加载任务位图]
   TCHAR fileName[20] = _T("");
   for (int i = 0; i < 12; i++)
   {
	   wsprintf(fileName, _T("IMG0000%d.bmp"), i);
	   man[i] = (HBITMAP)LoadImage(NULL, fileName, IMAGE_BITMAP, 270, 92, LR_LOADFROMFILE);
   }
   num = 0;
   //设置定时器
   SetTimer(hWnd, 1, 100, NULL);

   AnimaPaint(hdc);

............................................................
消息处理函数
switch (message)
	{
	case WM_TIMER:
		AnimaPaint(hdc);
		break;

............................................................
void AnimaPaint(HDC hdc)
{
	if (num > 12)
	{
		num = 0;
	}
	SelectObject(mdc, man[num]);
	BitBlt(hdc, 0, 0, 640, 480, mdc, 0, 0, SRCCOPY);
	num++;
}


最终效果图:

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值