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);
 
 
游戏人物和界面,可以直接在地图中描点定位,然后载入需要的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 文件的时候,整个游戏崩溃!!!试了我好几次才试出真正的原因!很可能有人一不小心就陷入大坑无法自拔,然后不得不重新做一张新的地图,然后又一不小心 ……

 

 

 

 

 

全部评论
找素材是件让人忧伤的事..
点赞 回复 分享
发布于 2015-07-15 17:47

相关推荐

点赞 评论 收藏
分享
Tom哥981:让我来压力你!!!: 这份简历看着“技术词堆得满”,实则是“虚胖没干货”,槽点一抓一大把: 1. **项目描述是“技术名词报菜名”,没半分自己的实际价值** 不管是IntelliDoc还是人人探店,全是堆Redis、Elasticsearch、RAG这些时髦词,但你到底干了啥?“基于Redis Bitmap管理分片”是你写了核心逻辑还是只调用了API?“QPS提升至1500”是你独立压测优化的,还是团队成果你蹭着写?全程没“我负责XX模块”“解决了XX具体问题”,纯把技术文档里的术语扒下来凑字数,看着像“知道名词但没实际动手”的实习生抄的。 2. **短项目塞满超纲技术点,可信度直接***** IntelliDoc就干了5个月,又是RAG又是大模型流式响应又是RBAC权限,这堆活儿正经团队分工干都得小半年,你一个后端开发5个月能吃透这么多?明显是把能想到的技术全往里面塞,生怕别人知道你实际只做了个文件上传——这种“技术堆砌式造假”,面试官一眼就能看出水分。 3. **技能栏是“模糊词混子集合”,没半点硬核度** “熟悉HashMap底层”“了解JVM内存模型”——“熟悉”是能手写扩容逻辑?“了解”是能排查GC问题?全是模棱两可的词,既没对应项目里的实践,也没体现深度,等于白写;项目里用了Elasticsearch的KNN检索,技能栏里提都没提具体掌握程度,明显是“用过但不懂”的硬凑。 4. **教育背景和自我评价全是“无效信息垃圾”** GPA前10%这么好的牌,只列“Java程序设计”这种基础课,分布式、微服务这些后端核心课提都不提,白瞎了专业优势;自我评价那堆“积极认真、细心负责”,是从招聘网站抄的模板吧?没有任何和项目挂钩的具体事例,比如“解决过XX bug”“优化过XX性能”,纯废话,看完等于没看。 总结:这简历是“技术名词缝合怪+自我感动式凑数”,看着像“背了后端技术栈名词的应届生”,实则没干货、没重点、没可信度——面试官扫30秒就会丢一边,因为连“你能干嘛”都没说清楚。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务