①// 调用TMXTiledMap的函数读取TileMap.tmx文件创建一个瓦片地图对象

_tileMap = TMXTiledMap::create("TileMap.tmx");

// 把地图的锚点和位置都设置为原点,这样可以使地图的左下角与屏幕的左下角对齐

_tileMap->setAnchorPoint(Vec2::ZERO);

_tileMap->setPosition(Vec2::ZERO);

// 将地图添加为当前层的子节点

this->addChild(_tileMap,-1);

②// 调用TMXTiledMap的getObjectGroup方法获取对象层

auto objects = _tileMap->getObjectGroup("Objects");

// 根据对象名称获取对象的信息

ValueMap map = objects->getObject("player");

// 获取地图中设置的player对象的x和y值

int x = map.at("x").asInt();

int y = map.at("y").asInt();

// 创建玩家精灵,并将地图中对象的x和y值作为玩家精灵对象出现的位置

_player = Sprite::create("player.png");

_player->setPosition(x, y);

// 将玩家精灵添加为地图的子节点

_tileMap->addChild(_player);

// 创建事件监听器

auto planeListener = EventListenerTouchOneByOne::create();

// 响应触摸事件函数

planeListener->onTouchBegan=[](Touch* touch, Event* event){return true;};

planeListener->onTouchEnded=[this](Touch* touch, Event* event){

// OpenGL坐标

Vec2 touchLocation = touch->getLocation();

// 相对Node的坐标

Vec2 nodeLocation = this->convertToNodeSpace(touchLocation);

// 镜像反转,使玩家面对移动的方向

if (_player->getPosition().x < nodeLocation.x) {

if(!_player->isFlippedX())

_player->setFlippedX(true);

}

else

{

if(_player->isFlippedX())

_player->setFlippedX(false);

}

// 重新设置玩家位置

_player->setPosition(nodeLocation);

// 调整视角中心位置让地图随玩家一起移动

this->setViewpointCenter(_player->getPosition());

};

// 添加场景优先事件监听器

Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(planeListener, this);

// 把玩家作为视觉中心来显示,让地图随玩家一起移动

void HelloWorld::setViewpointCenter(Vec2 position){

// 让地图跟随精灵移动:超过屏幕中心的一半的时候需要移动

int x = MAX(position.x, _screenWidth/2);

int y = MAX(position.y, _screenHeight/2);

// 不让显示区域超出地图的边界

x = MIN(x, (_tileMap->getMapSize().width *

_tileMap->getTileSize().width-_screenWidth/2));

y = MIN(y, (_tileMap->getMapSize().height *

_tileMap->getTileSize().height-_screenHeight/2));

// 实际移动的位置坐标

Point actualPosition = Vec2(x, y);

// 屏幕中心位置坐标

Point centerOfView = Vec2(_screenWidth/2, _screenHeight/2);

// 计算中心位置和玩家位置两点之间的差值

Point viewPoint = centerOfView - actualPosition;

// 重新设置屏幕位置

this->setPosition(viewPoint);

}

TiledMap的使用相关推荐

  1. Cocos2d-xna : 横版战略游戏开发实验5 TiledMap实现关卡地图

    Cocos2d-xna : 横版战略游戏开发实验5 TiledMap实现关卡地图 在前面的几篇中动手实验使用了CCSprite.CCScene.CCLayer.CCAction.CCMenu等coco ...

  2. java如何识别tiled地图_Egret学习-TiledMap使用

    环境说明: 引擎版本:5.2.4 Egret Wing 4.1.6 2.新建一个游戏项目Tank 3.将上面包含tiled库的libsrc文件夹放置在 Egret 工程的父文件夹 /工作空间 ---- ...

  3. 转:瓦片地图TiledMap

    标签:tiledMap 3.x cocos tmx tile 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://shahdza.bl ...

  4. cocos2dx使用TiledMap模拟3D地图场景----斜45度2D地图的靠墙直线移动

     基于cocos2dx引擎的第三人称射击游戏,角色使用3D模型,地图采用2.5D.  定制地图编辑系统抛开不谈,这里最大可能的挖掘现有工具TiledMap的潜力,完成超2.5D地图的实现.  使用2D ...

  5. 【Cocos Creator实战教程(3)】——TiledMap(瓦片地图)组件

    1. 前言 瓦片地图是由一张一张的正方形小图片拼接成的地图,例如炸弹人,QQ堂都是非常典型的瓦片游戏.瓦片地图(Tile Map) 不但生成简单,并且可以灵活的用于Cocos2d-x引擎.不论你的游戏 ...

  6. CocosCreator知识库amp;amp;lt;二amp;amp;gt;关于TiledMap的系统学习教程(阶段性更新)

    CocosCreator知识库<二>关于TiledMap的系统学习教程<26/12/2017>(长期更新,看不懂先大致总体搞一遍,然后回头细看)                 ...

  7. Tiledmap基本使用教程

    如果你是第一次使用tiledmap的朋友,那么这篇文章一定能给你带来一些帮助.相信大家都玩过飞行射击类游戏,游戏中不断有敌方飞机biubiu的飞向玩家,那么这些飞机不是随机出现,是可以用tiledma ...

  8. 4个方面入手 TiledMap 地图优化!W字干货分享

    引言:如何进行 TiledMap 地图优化?开发者 Bool Chen 将分享一套行之有效的 TiledMap 地图优化方案,其中包括了渲染.解析.寻路方面. 当项目里的地图越来越庞大和复杂,一些性能 ...

  9. tiledmap 图块属性_tiledmap 可以在图块层的指定格子上添加Sprite吗

    constructor(mapname:string, x:number, y:number){ super(); //显示登陆界面 this.tMap = new Laya.TiledMap() t ...

  10. Egret中使用TiledMap

    一.关于如何制作瓦片底图:http://www.skywind.me/blog/archives/427 二.ts中TiledMap类 /**** @author **/ 'use strict'; ...

最新文章

  1. 高通为何46亿美元ADAS Veoneer Arriver
  2. [JOISC2014]バス通学
  3. JavaScript(循环)
  4. Android ViewPager实现多个图片水平滚动
  5. java读取excel数据_Java读取Excel内容(转)
  6. lintcode 最大子数组III
  7. 进程线程协程对比(通俗)
  8. JAVA 测试日期的不同显示格式
  9. vscode远程无法更新
  10. L1-006. 连续因子-PAT团体程序设计天梯赛
  11. java更改reader字体颜色,Java 修改 文件内容 and BufferedReader 乱码问题
  12. 自动刷新网页脚本_抢不到票?你离idol只差一个大麦抢票脚本。
  13. 仿王者荣耀HTML示例代码
  14. LoudMiner:伪装在VST软件中的跨平台挖矿软件
  15. 电商项目实战--收货地址相关
  16. 服务器修复工具,Microsoft .NET Framework 修复工具可用
  17. Style之flag标签
  18. solaris linux 计算磁盘容量 cyl alt sec
  19. 中国过氧化二异丙苯市场投资状况分析与前景趋势研究报告2022年版
  20. 亚马逊云科技re:Invent现场访谈:医疗健康行业的云上未来

热门文章

  1. 资源 | 一网打尽成语歇后语,GitHub新华字典数据库
  2. win10鼠标灵敏度怎么调_和平精英,灵敏度到底怎么调?小编视频来教你!
  3. Mac安装mysql 8.0.21
  4. 服务器搭建及微信开发
  5. 三问智能体,华为如何落地全场景智慧
  6. InnoDB存储引擎:锁
  7. 基于用户的协同过滤个性化音乐推荐系统毕业设计
  8. 东方甄选推独立App自立门户;西湖大学『强化学习数学基础』教材书稿;经典书籍『深入浅出设计模式』Python版代码;前沿论文 | ShowMeAI资讯日报
  9. php中vc14是什么意思,VC9、VC11、VC14、VC15是啥?
  10. java 名片通讯录,jsp实现通讯录系统