Tiled软件使用的注意事项:
1️⃣文件的导入。图层文件的导入不能有中文名字,最好是先把需要的资源文件导入到工程的Resource文件夹中,让后到这个文件夹中导入Tiled软件,进行瓦片地图的绘制。
2️⃣文件的导出。在保存的时候就可以直接保存到工程的Resource文件夹中,随后在工程中添加,即导出成功。导出后可以查看.tmx文件,可以尝试着读懂导出的.tmx文件。
以上步骤完成后就可以在程序中使用瓦片地图了。
// 获得地图层,将其层级设为-1
TMXTiledMap * m_tiled = TMXTiledMap::create(“Tiled1.tmx");
addChild(m_tiled,-1);
//获得图层
TMXLayer * floor = tiled->getLayer("floor");
接着我们要添加英雄对象了,首先要先设置一个对象层,接着为了设置英雄的精灵图片,设置一个矩形区域(“图层”)
TMXObjectGroup * objects = m_tiled->getObjectGroup("object");

 ValueMap m_player = objects->getObject(“player”);
然后设置一个精灵,用这个对象的坐标来设置精灵的位置
    int x = m_player["x"].asInt();
    int y = m_player["y"].asInt();
    auto hero = Sprite::create("Player.png");
    hero->setPosition(x, y);
这时候,精灵已经可以在地图上显示出来了,值得注意的是对象曾与对象之间是Map的键值对的存储形式
这时候需要考虑通过点击来控制英雄的移动了。首先要设置触摸监听,代码略去,在重写的触摸事件中首先要知道点击点的位置是世界坐标系,相对于屏幕的左下角,需要将其转换为节点坐标系的点(相对于layer,因为在layer中的精灵坐标是相对于layer的坐标),通过点击屏幕让英雄瞬移到所点击屏幕的坐标显然是不可行的,我们点击一下让英雄移动一个瓦块的距离,通过点击的位置与英雄的位置差来判断行走的方向。
bool TiledTest::onTouchBegan(Touch *touch, Event *unused_event){
   
auto touchPos = touch->getLocation();
   
auto heroPos = hero->getPosition();
   
auto direction = touchPos - heroPos;
   
if (std::abs(direction.x)>std::abs(direction.y)) {
       
if (direction.x<0) {//left
            heroPos.
x -= m_tiled->getTileSize().width;
        }
else{//right
            heroPos.x += m_tiled->getTileSize().width;
        }// 出于方便的考虑将m_tiled设为了成员变量

    }else{
        if (directio     n.y<0) {
            heroPos.y -= m_tiled->getTileSize().height;
        }
       
else{
            heroPos.
y += m_tiled->getTileSize().height;
        }

    }
    hero->setPosition(heroPos);// 出于方便的考虑将hero设为了成员变量
    return true;

由于地图的比较大,需要设置屏幕的适配,类似于前面说到的摄像机类,即让英雄能够走完整个地图,我们写一个名字为setPlayerPosition(Vec2 pos)的函数来完成这一功能。
屏幕中心与地图位置的差值最小是屏幕大小的一半,最大是地图的大小减去屏幕大小的一半,我们选择设置一个在一个void setViewPosition(Vec2 pos)函数中实现这个功能.
void TiledTest::setLayerPosition(Vec2 pos){
   
auto winsize = Director::getInstance()->getVisibleSize();
   
int x,y;//差值(相对距离)
   
if (pos.x > winsize.width/2) {
        x = pos.
x;
    }
else{ x = winsize.width/2; }
   
if (pos.y > winsize.height/2) {
        y = pos.
y;
    }
else{ y = winsize.height/2; }
   
   
auto width = m_tiled->getTileSize().width * m_tiled->getMapSize().width-winsize.width/2;
   
auto height = m_tiled->getMapSize().height * m_tiled->getTileSize().height-winsize.height/2;
   
if (x>width) {
        x = width;
    }
   
if (y>height) {
        y = height;
    }
   
auto layerPos = Vec2(winsize.width/2, winsize.height/2)- Vec2(x, y);

    this->setPosition(layerPos);}
此时我们应该考虑限制英雄的移动了,对墙体等应设置属性让其无法通过,而对“蔬菜”应该让其吃掉。这时候需要使用Tiled软件添加一个图层,给起一个标记,添加属性与值,在程序中可以得到他,以便做碰撞检测.这个图层即为标记层,专门处理墙的问题。其中首先需要经过一个节点坐标到瓦片坐标的转换,瓦片地图以左上角为原点,每一个瓦片为单位。
Vec2 HelloWorld::getTiledPos(Vec2 pos){
    int x = pos.x/m_tiled->getTileSize().width;
    int y = (m_tiled->getMapSize().height*m_tiled->getTileSize().height - pos.y)/m_tiled->getTileSize().height;
    return Vec2(x, y);}
然后就需要根据属性值来得到墙,做碰撞检测.首先每一个瓦片都有一个唯一的ID值。通过获得ID来判断设置的标记wall是否为true,若不是则不是墙。
void TiledTest::setPlayerPostion(Vec2 pos){
    auto tiledCoord = this->getTiledPos(pos);
    auto tiledGID = meta->getTileGIDAt(tiledCoord);
    if (tiledGID) {
        ValueMap properties = m_tiled->getPropertiesForGID(tiledGID).asValueMap();
        if (!properties.empty()) {
            auto wall = properties["wall"].asString();
            if (wall=="true") {
                log("zhuangqiang");
                return;
            }
        }
    }
    hero->setPosition(pos);// 若没有撞墙则正常移动
是不是该考虑给水果,蔬菜设置可以被英雄吃掉?这时候需要额外建立一个图层并添上要被吃掉的水果并添加属性,因为需要吃掉水果,水果需要被移除,倘若不新建一个层,删除后会成一个黑洞或报错。
if (foodwall=="true") {// 在判断撞墙处           
food->removeTileAt(Vec2(tiledCoord.x, tiledCoord.y));}
这时候要添加敌人了void addEnemy(Vec2 pos);

Tiled瓦片地图的使用相关推荐

  1. Tiled 瓦片地图

    glory原创,首发于泰然,转载请注明出处 https://github.com/chukong/cocos-docs/blob/master/manual/framework/native/v3/t ...

  2. tiled素材_瓦片地图 Tiled Map

    瓦片地图(Tiled Map) 瓦片地图(Tile Map) 不但生成简单,并且可以灵活的用于Cocos2d-x引擎.不论你的游戏是角色扮演游戏, 平台动作游戏或仿打砖块游戏,这些游戏地图可以使用开源 ...

  3. Tiled Map(瓦片地图)

    Tiled Map(瓦片地图) Legendof19912014-06-12 14:57:28383 次阅读 Tiled Map(瓦片地图)编辑器的使用,详见:http://blog.csdn.net ...

  4. Tiled结合Unity实现瓦片地图

    前段时间应公司需求做瓦片地图,cocos与瓦片地图的结合案例很多,但unity的却少之又少,做瓦片地图少不了Tiled Map Editor(下载地址),这个教程很多,也自带例子,关于怎么拼地图,这里 ...

  5. Tiled结合Unity实现瓦片地图——Tiled2Unity篇

    本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/75356478 前段时间应公司 ...

  6. Tiled Map Editor(瓦片地图编辑器)的Java和QT版本区别

    尊重作者劳动,转载时请标明文章出处. 作者: Bugs Bunny 地址: http://www.cnblogs.com/cocos2d-x/archive/2012/05/03/2479469.ht ...

  7. 斜45度瓦片地图(Staggered Tiled Map)里的简单数学

    瓦片地图(Tiled Map)系列文章: 斜45度瓦片地图(Staggered Tiled Map)里的简单数学 瓦片地图注意事项 前段时间在做游戏的地图编辑功能,我们是在一个斜45度视角的场景上,对 ...

  8. Tiled实现斜45度瓦片地图

    首先是我最近在做的一个项目的需求,要做一个斜45度角的大地图,里面有很多的建筑,会有人在里面走来走去.一个手指按住滑动可以拖动地图,两个手指按下可以调整地图的放大和缩小. 1.tiled新建地图,加入 ...

  9. 【Cocosd2d实例教程三】Cocos2d瓦片地图的导入

    (转载请注明出处:http://blog.csdn.net/buptgshengod)    上一节讲了如何使用Tiled制作瓦片地图,下面讲一下如何将地图导入游戏中.     第一步:将生成的文件导 ...

最新文章

  1. Swift2.1 语法指南——类型转换
  2. 我的心愿秀、大家也来秀(show)一下
  3. VB.NET实现DirectSound9 (6) 声音特效
  4. uploadify HTTP 302 错误如何解决?
  5. [leetcode]160.相交链表
  6. ES5-15 数组基础、数组方法、数组排序
  7. vue 父链和子组件索引_vue子组件和父组件双向绑定的几种方案
  8. 陕理工高级语言程序设计实验 (C)答案,陕理工高级语言程序计实验 (C)模板.doc
  9. ubuntu14.04使用MySQL数据库安装配置Hive 1.2.1
  10. 95-872-040-源码-CEP-CEP简介
  11. Excel中找出两列中相同的值
  12. php动态柱形图,php生成柱状图(统计图)程序
  13. 使用宝塔控制面板建站时出现网页出现404错误怎么办?
  14. 懒人——支付宝app支付
  15. 计算机英语名词简释及省略解释
  16. 实体消歧 Entity Disambiguiation
  17. 《嵌入式 - 语音识别TWen-ASR-ONE开发笔记》第2章 TWen-ASR-ONE开发环境搭建与使用
  18. Centos7下内网YUM源搭建
  19. OMG!程序猿小哥是如何做到基金收益率高达26.03%?
  20. pandas分组计算平均值_python – Pandas:如何按符号分组并按n行取平均值

热门文章

  1. 网站服务器防御怎么查,如何查看服务器被攻击
  2. java 这么获取农历_用JAVA查询中国农历年
  3. 编程语言php加密与解密的方法
  4. 读论文 A search-classify approach for cluttered indoor scene understanding
  5. ubuntu16.04录制4K屏软件使用备注
  6. win10怎么开启aptx_Soomal作品 - Windows与OSX 操作系统对aptX支持的验证测试报告 [Soomal]...
  7. 计算机一级重点复习提纲,计算机一级B考试复习提纲是什么?
  8. 七牛:测试域名过期?自己域名又没备案?这里有一招完美解决你烦恼
  9. rabbitMQ概述/在springboot下测试五种模式
  10. MySQL异常一之: You can‘t specify target table for update in FROM clause解决办法