012--VS2013 C++ 斜角景物地图贴图-位图
因为bmp图片上传不了,只能截图啦
//全局变量
HDC mdc;
HBITMAP fullmap;//声明位图对象,在初始化函数中完成的斜角地图会保存在这个位图中
const int rows = 10, cols = 10;
//--------------------------------------------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, 2, 0,
0, 1, 2, 0, 3, 0, 1, 1, 1, 2,
2, 0, 0, 3, 3, 0, 0, 1, 1, 2,
2, 0, 0, 3, 1, 0, 2, 2, 1, 3,
2, 2, 0, 0, 2, 2, 0, 0, 1, 2,
0, 2, 2, 2, 2, 0, 0, 1, 1, 2,
0, 2, 2, 2, 2, 2, 3, 1, 1, 3,
0, 2, 2, 2, 2, 2, 3, 1, 1, 2,
0, 2, 2, 2, 2, 3, 1, 1, 1, 2
};
int sceneIndex[rows*cols] = {
0, 2, 2, 0, 2, 0, 1, 0, 1, 1,
0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
0, 0, 1, 0, 1, 0, 0, 0, 2, 0,
2, 2, 0, 0, 1, 0, 0, 0, 0, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
2, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
hdc = GetDC(hwnd);
mdc = CreateCompatibleDC(hdc);
tmpdc = CreateCompatibleDC(hdc);
HBITMAP map[4], scene[2];
char mapname[20] = "";
//设定第一个图块的起始坐标,设定x轴上的坐标xstart 是将图块放在整个拼接地图的中间位置
int xstart = 32 * (rows - 1), ystart = 0;
//加载背景图,并选用到mdc中
fullmap = (HBITMAP)LoadImage(NULL, "bg.bmp", IMAGE_BITMAP, 800, 600, LR_LOADFROMFILE);
//将fullmap存入mdc中
SelectObject(mdc, fullmap);
//加载各图块图像
for (int i = 0; i < 4; i++)
{
//取得各个图块并存于"map[i]"中
wsprintf(mapname, "map%d.bmp", i);
map[i] = (HBITMAP)LoadImage(NULL, mapname, IMAGE_BITMAP, 128, 32, LR_LOADFROMFILE);
}
//加载景物的图像
for (int i = 0; i < 2; i++)
{
wsprintf(mapname, "scene%d.bmp", i + 1);
scene[i] = (HBITMAP)LoadImage(NULL, mapname, IMAGE_BITMAP, 100, 60, LR_LOADFROMFILE);
}
//按照mapIndex数组的定义取出对应的图块,进行地图拼接
for (int i = 0; i < rows * cols; i++)
{
int x, y;
//根据 mapIndex[i] 中的代号选取对应的图块到tmpdc中
SelectObject(tmpdc, map[mapIndex[i]]);
//i / cols;//求列编号
//i % cols;//求行编号
x = xstart + i % cols * 32 + i / cols *(-32);//求贴图x坐标
y = ystart + i / cols * 16 + i % cols * 16;//求贴图y坐标
//在mdc进行透明贴图
BitBlt(mdc, x, y, 64, 32, tmpdc, 64, 0, SRCAND);
BitBlt(mdc, x, y, 64, 32, tmpdc, 0, 0, SRCPAINT);
//景物的透明贴图
switch (sceneIndex[i])
{
case 1:
SelectObject(tmpdc, scene[0]);
BitBlt(mdc, x + 7, y - 44, 50, 60, tmpdc, 50, 0, SRCAND);
BitBlt(mdc, x + 7, y - 44, 50, 60, tmpdc, 0, 0, SRCPAINT);
break;
case 2:
SelectObject(tmpdc, scene[1]);
BitBlt(mdc, x + 7, y - 30, 50, 60, tmpdc, 50, 0, SRCAND);
BitBlt(mdc, x + 7, y - 30, 50, 60, tmpdc, 0, 0, SRCPAINT);
break;
}
}
MyPaint(hdc);
ReleaseDC(hwnd, hdc);
DeleteDC(tmpdc);
return TRUE;
}
//--------------------------------------------MyPaint() 函数---------------------------------------------------
//绘制图形
//-------------------------------------------------------------------------------------------------------------
void MyPaint(HDC hdc)
{
//背景图显示
SelectObject(mdc, fullmap);
BitBlt(hdc, 0, 0, 800, 600, mdc, 0, 0, SRCCOPY);
}
//--------------------------------------------Game_CleanUp() 函数----------------------------------------------
//资源清理函数,在此函数中进行退出前的资源的清理工作
//-------------------------------------------------------------------------------------------------------------
BOOL Game_CleanUp(HWND hwnd)
{
DeleteDC(mdc);
DeleteObject(fullmap);
return TRUE;
}
如需整体运行框架,请点击: 游戏框架
游戏开发的梦想
梦开始的地方
012--VS2013 C++ 斜角景物地图贴图-位图的更多相关文章
- 011--VS2013 C++ 斜角地图贴图
准备好的图片 //全局变量HDC mdc;HBITMAP fullmap;//声明位图对象,在初始化函数中完成的斜角地图会保存在这个位图中const int rows = 10, cols = 10; ...
- [游戏模版10] Win32 平面地图贴图 正
>_<:picture resource >_<:If you master the ways of mapping picture,then this problem is ...
- 013--VS2013 C++ 地图贴图-其它格式图片
//--------------------------------------------InitInstance() 函数------------------------------------- ...
- 010--VS2013 C++ 平面地图贴图
先准备好地图的小图片: //全局变量HDC mdc;HBITMAP fullmap;const int rows = 8, cols = 8; //-------------------------- ...
- Web地图导图总结
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 地图端展示了各类制图效果,用户希望可以一键生成报表,其中核心 ...
- svg格式的中国地图轮廓图
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C ...
- .NET Reflector 8.2支持VS2013高亮显示和代码地图视图
Red Gate Software公司最近发布的.NET Reflector 8.2支持Visual Studio 2013,其Reflector 桌面程序能够转换十六进制/十进制值.桌面程序还支持局 ...
- VS2013 图片背景·全透明背景图(转)
Note: 1.xaml编辑器和个别的编辑器(如HTML的)因为是承载在VS的一个子窗口上,所以背景依然是黑色的. 2.该背景必须在VS实验环境下使用. 效果图: 1.准备工作 1.先准备Visual ...
- 012 VS2013常用快捷键
2016-01-28 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”: 2)前进到下一个光标位置:“Ctrl + Shift + - ”. 2. ...
随机推荐
- Js获取当前日期时间及其它操作(转)
var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1 ...
- HDOJ1010(BFS)
//为什么bfs不行呢,想不通 #include<cstdio>#include<cstring>#include<queue>using namespace st ...
- dell N1500 安全配置
http://www.dell.com/Support/Article/us/en/19/HOW10832 Setting a management IP address A reachable IP ...
- Windows 2003 + IIS6.0 相关 401.1 或 401.2 等问题解决
我自己处理的过程: 1. 问题场景: 1.1 我本身有一个虚拟机为 win2003 + iis6.0 的环境 c:\ 为NTFS 格式 D:\为Fat32 格式 1.2 我需要部署一个 asp.net ...
- hbase 各个概念,region,storefile
HBase中有两张特殊的Table,-ROOT-和.META. .META.:记录了用户表的Region信息,它可以有多高region(这的意思是说.META.表可以分 裂成多个region,和用户表 ...
- What is the behavior of lnk files?
I access a files which name is "abc.doc", no doubt a lnk file "abc.doc.lnk" show ...
- com.google.inject.CreationException: Guice creation errors
错误的原因:xml文件中方法名重复或错误
- vim 文字插入
我们知道VIM中,普通的复制和粘贴都是YY和PP.那么怎么将vim以外的文件插入到vim编辑器中呢!这是个问题: 首先我们要选中想要插入的文字,如: 然后进入vim插入模式:SHIFT + Inser ...
- Spark和Hadoop作业之间的区别
Spark目前被越来越多的企业使用,和Hadoop一样,Spark也是以作业的形式向集群提交任务,那么在内部实现Spark和Hadoop作业模型都一样吗?答案是不对的. 熟悉Hadoop的人应该都知道 ...
- HBase分布式安装
安装HBase之前需要先安装Hadoop,因为HBase是运行在Hadoop集群上的.安装Hadoop可以参照http://www.cnblogs.com/stGeekpower/p/3307289. ...