设为首页 加入收藏

TOP

(Visual C++)游戏开发笔记之十:基础动画显示(三)透明动画的实现 (二)
2014-11-23 20:17:31 来源: 作者: 【 】 浏览:94
Tags:Visual 游戏 开发 笔记 基础 动画 显示 透明 实现
*************
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = NULL;
wcex.hCursor = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "canvas";
wcex.hIconSm = NULL;

return RegisterClassEx(&wcex);
}

//****初始化函数*************************************
// 加载位图并设定各对象的初始值
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
char filename[20] = "";
HBITMAP bmp;
hInst = hInstance;

hWnd = CreateWindow("canvas", "动画演示" , WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}

MoveWindow(hWnd,10,10,640,480,true);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
bufdc = CreateCompatibleDC(hdc);
bmp = CreateCompatibleBitmap(hdc,640,480);

SelectObject(mdc,bmp);

dra = (HBITMAP)LoadImage(NULL,"dra.bmp",IMAGE_BITMAP,760,198,LR_LOADFROMFILE);
bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,640,480,LR_LOADFROMFILE);

num = 0; //显示图号
x = 640; //贴图起始X坐标
y = 360; //贴图起始Y坐标

MyPaint(hdc);

return TRUE;
}

//****自定义绘图函数*********************************
// 1.恐龙跑动图案的透明背景化
// 2.更新贴图坐标,实现动画效果
void MyPaint(HDC hdc)
{
if(num == 8)
num = 0;

//在mdc中贴上背景图
SelectObject(bufdc,bg);
BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);

//在mdc中进行透明处理
SelectObject(bufdc,dra);
BitBlt(mdc,x,y,95,99,bufdc,num*95,99,SRCAND);
BitBlt(mdc,x,y,95,99,bufdc,num*95,0,SRCPAINT);

//将最后的画面显示在窗口中
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);

tPre = GetTickCount(); //记录此次绘图时间
num++;

x-=20; //计算下次贴图的坐标
if(x<=-95)
x = 640;
}

//****消息处理函数***********************************
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY: //窗口结束消息,撤销各种DC
DeleteDC(mdc);
DeleteDC(bufdc);
DeleteObject(dra);
DeleteObject(bg);
ReleaseDC(hWnd,hdc);
PostQuitMessage(0);
break;
default: //其他消息
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

这个程序的运行结果为:







笔记十到这里就结束了。


本节源代码请点击这里下载: 【Visual C++】Code_Note_10http://download.csdn.net/detail/zhmxy555/4175339


感谢一直支持【Visual C++】游戏开发笔记系列专栏的朋友们,也请大家继续关注我的博客,我一有空就会把自己的学习心得,觉得比较好的知识点写出来和大家一起分享。

精通游戏开发的路还很长很长,非常希望能和大家一起交流,共同学习和进步。

大家看过后觉得有启发的话可以顶一下这篇文章,让更多的朋友有机会看到它。也希望大家可以多留言来和我探讨编程相关的问题。
最后,谢谢大家一直的支持~~~

The end


摘自 枫落★流年



首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇(Visual C++)游戏开发笔记之十.. 下一篇(Visual C++)游戏开发笔记之十..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: