cocos2d-x使用tile map总结

cocos2d-x使用tile map总结

使用tile map来做游戏能大大提高开发效率的,最近新开发的游戏也使用tile map来开发。

根据自己的使用过tile map的经验和参考一些资料,总结一下用法包括:

1   最基本的是做游戏地图,导入素材之后,用刷子刷出自己需要的地形图;创建地图和背景层的代码例子如下:
    auto tileMap = TMXTiledMap::create("try1.tmx");
    auto backgoround = tileMap->getLayer("background");
    addChild(tileMap, 1);
2  游戏人物和界面,可以直接在地图中描点定位,然后载入需要的Sprite或界面,如记分牌,按键等;当然其实更加方便的是使用cocos studio并和tile map结合起来;步骤:
    1 菜单选择:图层->添加对象图层:
    2. 然后就可以在选中对象层的情况下,画矩阵,这个矩阵在游戏画面中是不显示的,不过可以帮助我们定位
    3. 然后在游戏中使用代码定位这个矩阵,并在这个矩阵为止放置需要的对象
对应的代码例子如下:
cocos2d::TMXObjectGroup *playerObjGroup = tileMap->getObjectGroup("player_object_group");

    auto playerPos = playerObjGroup->getObject("player_position_1");

    float x = playerPos["x"].asFloat();
    float y = playerPos["y"].asFloat();
    player = Sprite::create("029.png");
    player->setPosition(x, y);
    addChild(player, 1);
3. 和一些游戏碰撞,游戏事件等设置,如下碰撞代码:
    int tileGid = block->getTileGIDAt(tileCoord);
    if (tileGid) {
        auto properties = tileMap->getPropertiesForGID(tileGid).asValueMap();
        if (!properties.empty()) {
            auto collision = properties["blockage"].asString();
                if ("true" == collision) {
                    return;
                }///<blockage 为自定义属性,值为"true"
        }
    }
4. 游戏关卡设计,配置:使用tile map可以定位在什么地方放置怪物,或者障碍物等,而且可以根据需要自定义附带各种需要的属性,从而达到关卡编辑的需求,如使用不同的自定义属性定义怪物和障碍物的种类,不同种类怪物的外观等;如下面代码,只是简单地领导敌人在地图的不同位置出现,其中“Enemy”属性也是自定义的,这里算是定义了敌人的种类,如果根据需要还可以定义敌人使用的图片资源,攻击力,何时出现等……做法是可以发挥想象满足很多需求
for (auto& epos : enemyObjGroup->getObjects()){
        ValueMap& dict = epos.asValueMap();
        if (dict["Enemy"].asInt() == 1){
            x = dict["x"].asInt();
            y = dict["y"].asInt();
            addEnemys(Point(x, y));///< 自定义增加敌人的函数
        }
    }

当然tile map十分强大,应该还有其他多种用法我没有总结全。

本文仅供参考,并非详细解说。

最后吐槽cocos2d-x使用tile map的一个超级大坑:

如果在tile map中新建了图层之后,但是没有在新建的图层中涂上任何图块,那么cocos2d-x一读这样的tmx文件的时候,整个游戏崩溃!!!试了我好几次才试出真正的原因!很可能有人一不小心就陷入大坑无法自拔,然后不得不重新做一张新的地图,然后又一不小心……

最后奉上几篇比较好的tile map入门教程,网上这种教程好像也比较少,不过有一下几篇就足够了:

http://www.cocos2d-x.org/wiki/TileMap

http://gamedevelopment.tutsplus.com/tutorials/introduction-to-tiled-map-editor–gamedev-2838

http://www.cocoachina.com/bbs/read.php?tid-196632.html

http://discuss.cocos2d-x.org/t/tutorial-series-use-the-cocos2d-x-3-0-game-engine-write-a-tile-map-game-part01/12938

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-24 11:15:23

cocos2d-x使用tile map总结的相关文章

Kibana功能之---Tile Map

既然logstash在收集日志的时候可以分析到clientip来自于那个国家城市及其坐标,那么肯定可以通过这些信息绘制在地图上直观的表现出来.awstats是可以做到的,但是nginx的日志格式及内容一旦修改就无法分析了. 首先有两样必须先安装好: #/opt/logstash/bin/logstash-plugin install logstash-filter-geoip 安装logstash的geoip插件,使logstash可以获取到国家及城市信息 #yum install GeoIP-

cocos2d::Map

v3.0 beta加入 定义在"COCOS2DX_ROOT/cocos/base"的"CCMap.h"头文件中. template <class K, class V> class CC_DLL Map; cocos2d::Map<K,V>是使用std::unordered_map作为底层结构的关联式容器. 而std::unordered_map是一个存储键值对的关联式容器,它可以通过它们的键快速检索对应的值. 使用unordered_map

Cocos2d-x3.0模版容器详解之——cocos2d::Vector&lt;T&gt;, cocos2d::Map&lt;K,V&gt;, cocos2d::Value

Cocos2d-x3.0模版容器详解之一:cocos2d::Vector<T>  http://www.cocoachina.com/bbs/read.php?tid=199793Cocos2d-x3.0模版容器详解之二:cocos2d::Map<K,V>  http://www.cocoachina.com/bbs/read.php?tid=199916Cocos2d-x3.0模版容器详解之三:cocos2d::Value  http://www.cocoachina.com/b

cocos基础教程(4)数据结构介绍之cocos2d::Map&lt;K,V&gt;

1.概述 cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value键值对组合成构成的关联性容器,允许基于键对单个元素进行快速检索. 2.模版参数 K - key value的类型. map中元素都由它的 key值作为唯一标识. V - mapped value的类型. T 必须是一个指向 cocos2d::Object 子类对象的指针. 3.内存管理 如果你在栈上声明了一个

Cocos2d-x3.0模版容器具体解释之二:cocos2d::Map&amp;lt;K,V&amp;gt;

1.概述: 版本号: v3.0 beta 语言: C++ 定义在 "COCOS2DX_ROOT/cocos/base" 路径下的 "CCMap.h" 的头文件里. template <class K, class V> class CC_DLL Map; cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value键值对组合成

初学Cocos2dx

初学cocos2dx Cocos2dx 中的主要概念包括:应用.导演.场景.层.精灵.动画.动作. Cocos2dx里面的主要类 1.CCObject Object Object Object 是cocos2dx的主要基类.主要提供了引用计数的功能. 2.CCPoolManager CCPoolManager CCPoolManager CCPoolManager 是个单体类,负责管理多个垃圾回收器 CCAutoreleasePool 在CCObject::Autorelease方法中单体CCP

不容错过的超棒游戏开发资源列表

转自:http://www.cxyclub.cn/n/53914/ 开发工具 一套游戏开发工具,来自一些天才的开发者 Magic Tools Graphics Assets/Placeholders 2D Tools Spritesheet Tools Bitmap Compression Texture Tools Character Generators Tile Editors Animation Vector/Image Editor 3D Tools Modeling Terrain

Google Earth数据存储、管理、表现及开发机制

一.    Google Earth(Map)介绍 1.1    Google Earth介绍 在众多的地理信息服务提供商中,Google是较早提供服务的一个,其他有如ESRI这样的巨头,也有中国的灵图.但凭借着提供优质.高效.高性价比服务的理念和Google自身的巨大影响力,Google推出的Google Earth和Google Map平台已经成为全球影响力最大的互联网空间信息服务平台. Google Earth具有十分突出的三个特点[1],一是可以显示矢量数据地标,包括点.线.面等几何类型

cocos2dx[3.4](26)——视差节点ParallaxNode

[唠叨] 当我们移动时,我们会看到离我们越近的物体,会移动的越快,越远的物体,比如远处的山会移动的很慢,而最远处的物体,比如太阳几乎不动,这个现象叫视差. 而在游戏中模仿视差,可以让玩家感觉到游戏中的角色的确是在移动.Cocos提供了 ParallaxNode 视差节点类,可以很容易的建立一个视差层,你可以控制每一层的视差率.位置和层级的高低. [参考] http://www.cocoachina.com/bbs/read.php?tid=213748 (无限视差节点+阴影仿真) http://