加载tmx地图素材怎么放大

TMX 地图解析
视频太卡?试试切换线路
学习本课程后,你将会掌握如何利用自定义属性来记录游戏的关键信息,从而通过这些关键信息来控制游戏的内容。
讲解与瓦片地图相关的类(TMXTiledMap、TMXLayer、TMXObjectGroup)并制作一个示例地图。
将讲解使用 TMXTiledMap 类加载并显示地图,在通过一些方法获取地图、图层、图块以及对象的属性信息。
首先绘制地图时的矩形对象改变图块的颜色,然后再根据对象坐标来创建显示对象。
根据地图图块属性作为地图碰撞信息,从而实现小球在指定区域内移动的功能。
只有成为VIP会员才能提问&回复,快吧!如果你还没有账号你可以一个账号。
添加新技术问题
课程 [本课概要]
中已存在问题
添加新技术问题
问题描述越详细,被解答的速度越快
有新回答时请邮件提醒我
着急,拜托快点
不急,慢慢解决
关联课程 [本课概要]1965人阅读
cocos2d-x常见问题(9)
1.cocos2d-x 加载tmx图片失败 &
& & &&重新编译运行时加载出错,提示“TMX: Only 1 tilset per layer is supported”。原来是同一个图层上只能使用同一图块资源的元素,必须要新建一个图层,将新添加的元素布局到新图层上面,重新加载就OK了!
2.加载代码时出现程序崩溃问题
修改如下:
& & &&编辑&参数&通用&另存为数据层&Base64(zlib压缩)&
& & &&编辑&参数&通用&另存为数据层&Base64(gzip压缩)
若出现提示:&Get date from file(...hexa-test.png) failed!&,就要把原始文件(用来创建新图块的图片)放进去项目里。
1) cocos2d-x好像对tmx中使用bmp图片不支持。
2) tmx不支持同“层”添加不同“图块”,但“图块”可以添加到不同“层”。&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:425437次
积分:5853
积分:5853
排名:第4322名
原创:150篇
转载:15篇
评论:154条
阅读:12984
文章:19篇
阅读:40293
阅读:25631
文章:24篇
阅读:36516
(9)(1)(4)(1)(1)(3)(4)(2)(1)(5)(5)(8)(2)(15)(21)(16)(35)(10)(22)Tiled地图编辑器怎么用_Tiled Map Editor认识及地图制作教程_最火下载站
您的位置: >
> Tiled Map Editor认识及地图制作教程
Tiled Map Editor认识及地图制作教程
关于Tiled Map Editor既然您找到本文,说明您是对它有一定了解的,Tiled Map Editor是一款非常不错的游戏地图编辑器,而我们本次提供的Tiled Map Editor教程则是转载了网上两位大神关于Tiled Map Editor的使用,欢迎大家阅读。
Tiled Map Editor使用教程一:
本教程转载于csdn,原文标题为《Cocos2d-x初入学堂(13)--&Tiled Map Editor地图编辑器 》,以下是原文。
我开发的游戏只有第一款游戏,没有用到地图编辑器,那是我刚进公司的时候,我们部门老大要策划师帮我策划的一个赛车的小游戏,由于小自然部门其他同事,也没得多少时间帮我做编辑器,但是我后面的游戏,基本上用到了地图编辑器,这个东西为我们策划师去配置一关关卡非常方便,如果是专业的游戏,都会有自己的编辑器的,编辑器我们必须学会喔~ 闲话不多说了,进入Tiled Map Editor 篇
由于昨天费了不少时间,去找素材了,因为这关系到我们接下来的游戏制作....呵呵~期待吧!
1、界面认识:
中文版的,我就不多介绍了吧....就说下怎么创建一张地图,然后我们再在程序里面,怎么使用它...
第一步:点新建
第二步:地图-&新建块
第三步:创建层,我这里创建了三个层...你也可以不创建,就使用默认那个层,然后将图块区域中的图块去填充你左边的地图..
第四步:填充...将对应的物品添加到对应的层上...图说明
第五步:导出.tmx文件 文件-另存为:命名 确认 ok ...
第六步:程序实现... 将.tmx和图块元素.png 都放到你新建的工程目录下面
第七步:运行啦~ 哈哈
哈哈~ 还是蛮漂亮的~ 我喜欢.... 昨天晚上我还特地下了一个盛大的pc泡泡堂玩,心理特别舒服,看到可爱的小人物
Tiled Map Editor使用说明二:
本教程转载于《Skywind Inside》,原文:
1. 首先下载 Tiled Map Editor:
文章中提供的地图编辑器:下载地址:最火软件站提供的编辑器:下载地址:资源图片集:(经小编测试已经失效了)
解压,然后下载资源图片解压,保存在examples目录下面
我们最终将编辑下图的地图,并用读出来:
2. 图块命名如下:
tile01.pngtile02.pngtile03.png
3. 运行 tiled.exe,选择:文件-&新文件:
按照这个对话框填写,然后&确定&
4. 打开资源管理器将文件&Tile01.png& 拖入上图右下角&图块&面板:
设置宽度,高度为32,边距,间距为0,然后确定。
这时tile01.png已经被按照刚才的规则切割好了,放在右下角的面板中。点击工具栏上的&图章刷&或者按键盘B就可以进入刷子绘制模式了,然后从右下角选择你需要绘制的图块,就可以在中间区域绘制了。
如法炮制,我们再将tile02.png拖入到右下角的图块面板:
右下角就有两个图块选项卡了,一个代表刚才的tile01.png, 一个是现在的tile02.png。接着选择一个草的图块,并在工具栏上选择&填充&(或者按F),将背景全部刷成草地:
5. 图块一次性可以选择很多块(用鼠标拖着,我们先简单的画一些沙子地形上去,还有池塘:
接着到主菜单&图层&选择&添加块层&,右上角的&图层&面板就多了一个图层2:
我们选中&块层2&以后就可以在这个图层上编辑了,不会影响到刚才的图层,接着在这个图层上添加树木和房屋,拖入tile3.png以后在&图块&面板拖动鼠标整体选择房屋图块:
注意房屋图块在tile03的右下角,需要再&图块&面板的&tile03&这个标签下,将滚动条拖到右下,接着在&块层2&上建房顶:
在右上角选择块层1,然后右下角选择对应图块给房子建墙:
然后接着编辑&块层2&,在墙上绘制门窗,然后同样的方法绘制另外一间木屋:
6. 继续绘制地图,添加希望添加的内容:
然后新建一个图块层4,用来表示可以走不可以走的地方,随便选一个颜色明显的图块,在图块层4上表示不能走的区域:
编辑好不可走的区域后,如果不想它影响画面,可以将右上&图块层4&前面的勾去掉,就不显示了。
7. 最终我们要导出成python可以识别的格式:选择主菜单-&编辑-&参数:
将&另存为数据层&选择为&CSV&,然后关闭。
这时候用&文件&-&保存&功能保存成&game1.tmx&
8. 用,打开game1.tmx文件,可以看到如下内容:
呵呵,一看就明白,就是CSV,前面记录了右下角&图块&的资源文件以及切割方式,ColorKey等,后面每个图层都用CSV格式来记录了里面的数据,0代表没有,1代表tile01.png的左上角第一个图块,2代表tile01.png左上角左数第二个图块:
tile01被按照32&32的大小切割成了20&28个小图块。按照行优先存储,在tile01左上角的第一个图块编号为1,往右一个图块是2,再往右就是3,第二行左数第一个图块就是编号21。
在game1.tmx的如下部分:
&tileset firstgid=&1& name=&Tile01& tilewidth=&32& tileheight=&32&&&&image source=&Tile01.PNG& trans=&ff00ff& width=&640& height=&896&/& &/tileset& &tileset firstgid=&561& name=&Tile02& tilewidth=&32& tileheight=&32&& &image source=&Tile02.PNG& trans=&ff00ff& width=&640& height=&960&/& &/tileset& &tileset firstgid=&1161& name=&Tile03& tilewidth=&32& tileheight=&32&& &image source=&Tile03.PNG& trans=&ff00ff& width=&640& height=&480&/& &/tileset&
其中 firstgid代表这个资源文件的左上角第一个图块的开始编号,如Tile02图块,它左上角第一个图块编号就是561.非常清爽明白的定义。
好了,有了这些,就可以在python中方便的解析了。
上一篇: 下一篇:接上一节内容:&
瓦片地图(Tiled Map)
  在cocos2dx文档中有简单的介绍及使用。详情可以看:
一、FastTMXTiledMap & TMXTiledMap选择
  在cocos2dx有2种实现加载Tmx地图的方法,分别是FastTmxTiledMap和TmxTiledMap。
  &&FastTmxTiledMap 的绘制层TMXLayer继承Node节点,直接利用opengl 的索引(indices)一次绘制所有的格子纹理。
&&&&&&& TmxTiledMap&&&&&&&的绘制层TMXLayer则通过继承 SpriteBatchNode节点,利用cocos2dx中封装好的批量绘制图片节点的功能实现一次绘制。
&&&&&&& &FastTmxTiledMap 在绘制效率上相对于&TmxTiledMap&&有显著提高,因为SpriteBatchNode实际流程是创建了批量的Node,通过SpriteBatchNode来管理这些Node的索引及统一绘制调用,
这样相对于一个FastTmxTiledMap中一个Node的调用多了顶点的消耗及内存的消耗。
GL&verts&和& GL&calls 对比
  & &(FastTmxTiledMap)&&&&&&&&&&&&&&&&&&&& (TmxTiledMap)
通过对比,可以看到同样的效果,绘制回调次数一致,但是顶点数 FastTmxTiledMap 仅占 TmxTileMap的 1/3多一点。
二、实际应用
  功能: 实现通用的循环地图,同时让地图分层同屏移动。
首先,需要设计一个结构体SMapStruct来管理同一层的地图实现循环,同时利用一个map来管理不同层级的SMapStruct。
class CMapS // 实际显示移动地图的管理
// 管理同一层级的地图
struct SMapStruct
SMapStruct() :nIdx(0), nLastIdx(-1){};
// 当前地图索引
// 上一层的索引
std::vector&int&
// 循环索引列表
std::vector&CMapScreen*&
// 实际地图列表
};   std::map&int, SMapStruct&&&m_mMapL&// 层级到SMapStruct列表
这里的索引可以指向csv读取出来的 SMapConfig 配置
// 地图配置
struct SMapConfig
std::string
// 地图资源
// 地图移动速度 px/s
// 是否Y移动
这样在游戏开始,对配置的地图信息进行加载,存到 m_mMapList列表中。
// 地图设置
for (size_t i = 0; i & m_vMap.size(); i++)
SMapConfig* pConfig = m_vMap[i];
if (pConfig)
SMapStruct& sMapStruct = m_mMapList[pConfig-&nIdx];
sMapStruct.vCircle.push_back(i);
这样m_mMapList列表中就存了当前游戏每一个层级需要的地图列表。然后在update对其进行更新显示,如下:
void CMapMgr::update(float dt)
auto it = m_mMapList.begin();
while (it != m_mMapList.end())
SMapStruct& sStruct = it-&
// 判断当前层级地图列表是否存在
if (sStruct.vCircle.size() &= sStruct.nIdx)
CCLOG("地图列表更新错误!!");
// 获取上一张显示的地图
if (CMapScreen* pMap = GetScreen(sStruct, sStruct.nLastIdx))
pMap-&update(dt);// 更新坐标
// 显示出视口
if (pMap-&IsOutViewPort())
pMap-&Sleep();
//隐藏该地图
sStruct.nLastIdx = -1;
// 获取当前显示的地图
if (CMapScreen* pMap = GetScreen(sStruct, sStruct.nIdx))
pMap-&update(dt);
// 判断是否需要显示下一张地图
if (pMap-&IsNeedNextScreen())
sStruct.nLastIdx = sStruct.nI
// 显示出视口
if (pMap-&IsOutViewPort())
pMap-&Sleep();
sStruct.nLastIdx = -1;
if (++sStruct.nIdx &= sStruct.vCircle.size())
sStruct.nIdx = 0;
if (CMapScreen*pNextMap = GetScreen(sStruct, sStruct.nIdx))
// 显示新地图
pNextMap-&Active(pMap-&GetConnetPoint());
以上实现了地图分层移动的管理,可以实现不同层级不同速度移动,或者静止等,也可以往不同方向移动。
SMapStruct类的实现,不再这里详细描述了。主要实现以下方法:
// 每个地图层
class CMapScreen : public Node
static CMapScreen*
create(const SMapConfig* pConfig);
Release();
Active(const Vec2& pt);
// 启用update循环移动
// 隐藏停止update
IsNeedNextScreen() const;
GetConnetPoint() const;
// 获取连接点
update(float dt);
IsOutViewPort() const ;
// 出了视口an
三、黑缝处理
&&&&& Tmx地图在cocos2dx移动的时候会偶尔出现黑线的现象。主要原因是底层顶点坐标取到了纹理之外导致颜色值取不到。
解决办法:
  1、移动的偏移坐标用整数。
  2、衔接处重叠1个像素。
  3、采用Director::Projection::_2D的方式绘制游戏。
m_nDelta+= m_pConfig-&nSpeed*
int nDelta = int(m_nDelta);
m_nDelta -= nD
// 移动对应的距离
m_pConfig-&bMoveY ? setPositionY(getPositionY() + nDelta) : setPositionX(getPositionX() + nDelta);
&2、代码如下:&
Vec2 CMapScreen::GetConnetPoint() const
if (!m_pConfig)
Vec2 origin = Director::getInstance()-&getVisibleOrigin();
if (m_pConfig-&bMoveY)
pt = m_pConfig-&nSpeed&0 ? getPosition() : Vec2(getPositionX(), getPositionY() + getContentSize().height);
pt.y = m_pConfig-&nSpeed & 0 ? pt.y + 1: pt.y - 1;
//重叠1个像素 防止黑缝出现
pt = m_pConfig-&nSpeed&0 ? getPosition() : Vec2(getPositionX() + getContentSize().width, getPositionY());
pt.x = m_pConfig-&nSpeed & 0 ? pt.x + 1 : pt.x - 1;//重叠1个像素 防止黑缝出现
3、代码如下:
director-&setProjection(Director::Projection::_2D);
另,3在cocos2dx-3.9中用2D方式绘制FastTmxMap有bug,需要回溯之前版本的配置如下:
void TMXLayer::draw(Renderer *renderer, const Mat4& transform, uint32_t flags)
updateTotalQuads();
//正交方式处理纹理,防止地图切换黑线
if (Director::getInstance()-&getProjection() == Director::Projection::_2D)
if (flags != 0 || _dirty || _quadsDirty)
Size s = Director::getInstance()-&getWinSize();
auto rect = Rect(0, 0, s.width, s.height);
Mat4 inv =
inv.inverse();
rect = RectApplyTransform(rect, inv);
updateTiles(rect);
updateIndexBuffer();
updatePrimitives();
_dirty = false;
bool isViewProjectionUpdated = true;
auto visitingCamera = Camera::getVisitingCamera();
auto defaultCamera = Camera::getDefaultCamera();
if (visitingCamera == defaultCamera) {
isViewProjectionUpdated = visitingCamera-&isViewProjectionUpdated();
if (flags != 0 || _dirty || _quadsDirty || isViewProjectionUpdated)
Size s = Director::getInstance()-&getVisibleSize();
auto rect = Rect(Camera::getVisitingCamera()-&getPositionX() - s.width * 0.5,
Camera::getVisitingCamera()-&getPositionY() - s.height * 0.5,
s.height);
Mat4 inv =
inv.inverse();
rect = RectApplyTransform(rect, inv);
updateTiles(rect);
updateIndexBuffer();
updatePrimitives();
_dirty = false;
if(_renderCommands.size() & static_cast&size_t&(_primitives.size()))
_renderCommands.resize(_primitives.size());
int index = 0;
for(const auto& iter : _primitives)
if(iter.second-&getCount() & 0)
auto& cmd = _renderCommands[index++];
cmd.init(iter.first, _texture-&getName(), getGLProgramState(), BlendFunc::ALPHA_NON_PREMULTIPLIED, iter.second, _modelViewTransform, flags);
renderer-&addCommand(&cmd);
附上几张加了Tmx地图后,现在游戏的效果:
阅读(...) 评论()cocos2dx(4)
最近在有个华为比赛,于是乎报名了,直在做一个游戏,所以没有写博客,今天遇到个问题觉得有必要写一下,以防之后遇到忘记。
auto map = TMXTiledMap::create(&newmap.tmx&);
map-&setAnchorPoint(Vec2(1, 0));
map-&setPosition(Vec2(960, 0));
//将TMX地图添加进布景
this-&addChild(map, 10);
很简单的步骤,可是却不能加载成功,自然是地图文件的问题,开始查看资料。
看到最多的是将地图文件设置成.gzip,跟着设置完毕,还是不行,于是看到另一篇说到地图文件的路径问题,(已经将地图文件的文件夹预加载)于是就将地图文件放在了resource文件根目录下,地图出来了。
首先是地图文件设置成.gzip属性,如果不行就将地图文件放在resource目录下。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:25748次
积分:1501
积分:1501
排名:千里之外
原创:126篇
转载:41篇
(7)(49)(78)(13)(4)(16)

我要回帖

更多关于 menyoo怎么加载地图 的文章

 

随机推荐