010--VS2013 C++ 平面地图贴图
2015-11-21 23:37
459 查看
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/10/a960f1082111e9a6d2e49ae46827f450.jpg)
先准备好地图的小图片:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/10/bd01fee2c858e6b8813165debaeeacff.jpg)
//全局变量
HDC mdc;
HBITMAP fullmap;
const int rows = 8, cols = 8;
//--------------------------------------------InitInstance() 函数----------------------------------------------
//加载资源
//-------------------------------------------------------------------------------------------------------------
BOOL InitInstance(HINSTANCE hInstance, int nShowCmd)
{
HWND hwnd;
HDC hdc, tmpdc;
//创建窗口第三步:正式创建窗口
//创建窗口函数
hwnd = CreateWindow("GameClass", WINDOW_TITLE, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hwnd)
{
return FALSE;
}
//创建窗口第四步:窗口的移动,显示和更新
MoveWindow(hwnd, 250, 80, WINDOW_WIDTH, WINDOW_HEIGHT, true);//调整窗口显示时的位置及窗口的大小
ShowWindow(hwnd, nShowCmd);//设定显示窗口时的状态
UpdateWindow(hwnd);//将窗口绘制于显示设备上
int mapIndex[rows * cols] =
{
0, 1, 2, 2, 0, 1, 0, 1,
0, 1, 2, 0, 0, 0, 1, 1,
2, 0, 0, 0, 0, 0, 0, 1,
2, 0, 0, 1, 1, 0, 2, 2,
2, 2, 0, 0, 2, 2, 0, 0,
0, 2, 2, 2, 2, 0, 0, 1,
0, 2, 2, 2, 2, 2, 1, 1
};
//DC
hdc = GetDC(hwnd);
mdc = CreateCompatibleDC(hdc);
tmpdc = CreateCompatibleDC(hdc);
//建立一空白的位图,其宽与高分别为"行数*图块宽" 与 "列数*图块高"
fullmap = CreateCompatibleBitmap(hdc, cols * 50, rows * 50);
//将fullmap存入mdc中
SelectObject(mdc, fullmap);
HBITMAP map[3];
char mapname[20] = "";
//加载各图块图像
for (int i = 0; i < 3; i++)
{
wsprintf(mapname, "map%d.bmp", i);
map[i] = (HBITMAP)LoadImage(NULL, mapname, IMAGE_BITMAP, 50, 50, LR_LOADFROMFILE);
}
//按照mapIndex数组的定义取出对应的图块,进行地图拼接
for (int i = 0; i < rows * cols; i++)
{
int x, y;
SelectObject(tmpdc, map[mapIndex[i]]);
//i / cols;//求列编号
//i % cols;//求行编号
x = i % cols * 50;//求贴图x坐标
y = i / cols * 50;//求贴图y坐标
BitBlt(mdc, x, y, 50, 50, tmpdc, 0, 0, SRCCOPY);
}
MyPaint(hdc);
ReleaseDC(hwnd, hdc);
DeleteDC(tmpdc);
return TRUE;
}
//--------------------------------------------MyPaint() 函数---------------------------------------------------
//绘制图形
//-------------------------------------------------------------------------------------------------------------
void MyPaint(HDC hdc)
{
SelectObject(mdc, fullmap);
BitBlt(hdc, 10, 10, cols * 50, rows * 50, mdc, 0, 0, SRCCOPY);
}
//--------------------------------------------Game_CleanUp() 函数----------------------------------------------
//资源清理函数,在此函数中进行退出前的资源的清理工作
//-------------------------------------------------------------------------------------------------------------
BOOL Game_CleanUp(HWND hwnd)
{
DeleteDC(mdc);
DeleteObject(fullmap);
return TRUE;
}
如需整体运行框架,请点击: 游戏框架
游戏开发的梦想
梦开始的地方
相关文章推荐
- 009--VS2013 C++ 显示位图部分透明化
- hdu 1000 1001
- C++ 可变参函数实现
- 008--VS2013 C++ 位图半透明化(另一种显示)
- C语言基础(三)
- C语言基础(二)
- 007--VS2013 C++ 显示位图半透明化
- C语言基础(一)
- 006--VS2013 C++ 加载其他格式图片,并显示半透明化
- C语言-----线性单链表
- c++类的嵌套(1)
- C++类的嵌套(2)-访问权限和调用关系
- C/C++——this指针
- C语言基础学习——第11天(预处理)
- 005--VS C++ 加载位图
- c++嵌套类-内存分配
- Webkit之JS/C++互调关系
- 004--VS C++ 绘制封闭图形
- C++时间类型详解
- 《C++ primer》英文第五版阅读笔记(十五)——逻辑和算术运算符