作者:知无不言之歌 | 来源:互联网 | 2023-07-04 13:44
透明动画
g_hBackGround = (HBITMAP)LoadImage(NULL, L"bg.bmp", IMAGE_BITMAP, WINDOWS_WIDTH,WINDOWS_HEIGHT, LR_LOADFROMFILE);
//4.设置贴图起始位置
g_iX = 0;
g_iY = 350;
g_iNum = 0;
Game_Paint(hwnd);
return TRUE;
}
//绘制函数
VOID Game_Paint(HWND hwnd)
{
//4.恢复图号
if (g_iNum == 8) //图号为大于7时 回置0
g_iNum = 0;
//5.选用位图对象 在没mdc中
SelectObject(g_bufdc, g_hBackGround); //对象要选入g_bufd 将位图对象图号
//5.进行贴图
BitBlt(g_mdc,0,0,WINDOWS_WIDTH,WINDOWS_HEIGHT,g_bufdc,0,0,SRCCOPY); //在g_mdc中 以目前的对象进行 SRCCOPY贴图
//6.在mdc进行透明处理
SelectObject(g_bufdc, g_hSprite); //对象要选入g_bufdc 480/8=60 108不变 (g_iNum*60,0)每一次开始源位置
TransparentBlt(g_mdc,g_iX,g_iY,60,108,g_bufdc,g_iNum*60,0,60,108,RGB(255,0,0)); //透明色彩法
//7.将后面的画面显示在窗口中
BitBlt(g_hdc, 0, 0, WINDOWS_WIDTH, WINDOWS_HEIGHT, g_mdc, 0, 0, SRCCOPY);
//8.记录此次的绘图时间
g_tPre = GetTickCount();
//9.图号要自增
g_iNum++;
//10计算下次贴图的坐标
g_iX += 10;
//11.如果超出窗口就将坐标置为-60
if (g_iX >= WINDOWS_WIDTH)
g_iX = -60;
}
BOOL Game_CleanUp(HWND hwnd)
{
//KillTimer(hwnd, 1); //删除定时器
//释放资源对象
DeleteObject(g_hBackGround);
DeleteObject(g_hSprite);
DeleteDC(g_bufdc);
DeleteDC(g_mdc);
ReleaseDC(hwnd, g_hdc);
return TRUE;
}
/*BitBlt()
hDestDC:指向目标设备环境的句柄。
x:指定目标矩形区域左上角的X轴逻辑坐标。
y:指定目标矩形区域左上角的Y轴逻辑坐标。
nWidth:指定源在目标矩形区域的逻辑宽度。
nHeight:指定源在目标矩形区域的逻辑高度。
hSrcDC:指向源设备环境的句柄。
xSrc:指定源矩形区域左上角的X轴逻辑坐标。
ySrc:指定源矩形区域左上角的Y轴逻辑坐标。
dwRop:指定光栅操作代码。*/
/*TransparentBlt()
hdcDest:指定目标的句柄。
nXOriginDest:指定目标矩形左上角的X轴坐标,坐标以逻辑单位表示。
nYOriginDest:指定目标矩形左上角的Y轴坐标,坐标以逻辑单位表示。
nnWidthDest:指定目标矩形的宽度。
nHeightDest:指定目标矩形的高度。
hdcSrc:源图的句柄。
nXOriginSrc:指定源矩形(左上角)的X轴坐标,坐标以逻辑单位表示。
nYOriginsrc:指定源矩形(左上角)的Y轴坐标,坐标以逻辑单位表示。
nWidthSrc:指定源矩形的宽度。
nHeightSrc:指定源矩形的高度。
crTransparent:源位图中的RGB值当作透明颜色。(用RGB(0,0,0)也就是黑色不行)返回值:
如果函数执行成功,那么返回值为TRUE;如果函数执行失败,那么返回值为FALSE*/