上一篇文章我们分析了《保卫萝卜》的精灵显示部分,已经动画部分,详情见关于pvr和plist的联合使用

在这篇文章了,我们看看《保卫萝卜》的地图是怎么设计的,通过其资源我们可以看到游戏资源里有tmx,基本上第一感觉就是tiled map editor这个开源的地图编辑器制作的。

那么我们打开来看看。因为tmx里有资源的图片数据,如果你没有的话,就会弹一个窗,默认是这个情况

这个图,告诉我们,几个信息,一个tile大小是多少,有多少个,就是一张地图有什么一个规模的样子,在右侧有些对象,可以有的有一些属性。如下图:

可能初步一看,还不知道这些对象有什么作用,如果我们配合着这张地图的实际场景图来看一下,就会有些线索。

现在比较有些意思里,对着这上图里那些对象属性,我们基本上可以知道,有对象属性的地方,其实是有预先放置的游戏物件的地方。中间有看到有些对象(那种小矩形)有

摸不着头脑是啥作用,后来在想a星算法的时候,恍然大悟,这应该就是所谓的导航点。其实就是为了跑路用的。

现在基本知道《保卫萝卜》的地图构成了,

如果要自己实现《保卫萝卜》的地图,一个就是知识要点就是tmx文件的应用。另一个就是对上一章cocos2dx精灵的灵活运用。

1、关于tmx文件的读取应用,给一个对tmx文件中对象的信息获取的例子

CCTMXTiledMap* map = CCTMXTiledMap::create("luobo/BGPath.tmx");addChild(map, 0, kTagTileMap);CCTMXObjectGroup* pObjGrp = map->objectGroupNamed("PATH");if (pObjGrp){/*  CCDictionary* pDic = pObjGrp->objectNamed("1Ob2");int type = pDic->valueForKey("type")->intValue();CCLOG("type:%d",type);*/CCArray* objArray = pObjGrp->getObjects();if (objArray && objArray->count() > 0)  {  CCObject* pObj = NULL;  CCARRAY_FOREACH(objArray, pObj)  {  CCDictionary* spawnPoint = (CCDictionary*)pObj;  CCDictElement *keyString = NULL;  CCDICT_FOREACH(spawnPoint, keyString)  {  const char *xps =  keyString->getStrKey();  CCLog("dict:key %s", xps);  CCString  *xps1 =  (CCString *)(keyString->getObject());  CCLog("dict:value %s", xps1->getCString());  }  }  }  }

基本上,没有什么注释,但是比较易懂,一看就明白什么意思。其实这一段代码读取就是tmx文件里的objectgroup标签下的内容,我们用文本编辑器打开tmx地图可以看到如下

从文件中可以看到,这里的坐标都是绝对坐标值,而不是tile的坐标。

而精灵沿着路径走的逻辑,其实就是基本游戏里该有的逻辑,就是一个速度与时间的关系。如下列示例代码,(由于时间关系,写的非常不好看,凑合看看)

                char path[16] = {0};sprintf_s(path,"PT%d",m_index);b2Vec2 target;CCDictionary* pDic = m_objgrp->objectNamed(path);target.x = pDic->valueForKey("x")->intValue() + 40;target.y = pDic->valueForKey("y")->intValue() - 40;b2Vec2 cur_pos(m_pos.x,m_pos.y);b2Vec2 vec = target - cur_pos;float dis = vec.Normalize();if (dis < MIN_DISTANCE){m_index++;}cur_pos += m_speed * dt * vec;CCSprite *pAni = (CCSprite*)getChildByTag(MONSTER_LAYER_ID);if (pAni){CCLog("cur pos:%f,%f",cur_pos.x,cur_pos.y);pAni->setPosition(ccp(cur_pos.x,cur_pos.y));m_pos = pAni->getPosition();}

以上就是最近一段时间分析的结果,下一次我们将分析《保卫萝卜》的战斗系统实现,非常有意思的一个游戏。。。。

本次实现的演示程序下载地址演示程序

《保卫萝卜》分析续——地图构成相关推荐

  1. sql server 存储过程中使用变量表,临时表的分析(续)

    最近,我有一朋友,对我说他的数据库中的很多存储过程,执行都是超时.让我替他看看是什么原因.我一看,原来他的存储过程中用了很多的临时表与变量表.于是我跟他说过犹不及. 在存储过程中使用临时表或变量表,使 ...

  2. HGE2D引擎按键消息分析(续)

    继续上一章对其按键消息处理抽丝剥茧.看BuildEvent()函数里面 我们先来分析其这段代码 if(type==INPUT_KEYDOWN) { if((flags & HGEINP_REP ...

  3. sys_brk分析 linux1.2.0版本,linux内存管理之sys_brk实现分析(续)

    看上面可以看出:clear_page_tables中,要操作的线性地址即为prev,prev->next之间的空洞线性地址.理解了这点之后,上面的代码就变得很简单了^_^ 三:用户空间的伸展 先 ...

  4. 分析称地图服务将成移动行业未来

           移动行业的未来或许在于地图服务.除驾车导航和本地商户搜索之外,围绕移动地图的竞争主要在于,哪家公司能推出最强大的工具,回答移动设备用户提出的多种多样的问题.这将成为苹果.谷歌.微软和Fa ...

  5. matlab 相关性分析 相关系数地图生成

    相关性检验公式: 输入表格结构展示:第一行为参数表头 第一列为样本序号 最后一列为说需预测的真实值 参考代码: %%相关系数分析.相关性分析 %foddcus %输入:input_c 相关系数检验的表 ...

  6. 奇迹Mu分析 - Bool地图

    通过读取游戏内存,绘制角色当前地图 var MapBase:Cardinal = $86E9D78; function TMain.GetMapPointByIndex(n: Cardinal): W ...

  7. linux brk函数,linux内存管理之sys_brk实现分析(续)

    unmap_region是整个收缩过程中的核心,它主要完成相应项表项的修改,具体映射页框的释放 代码如下: static void unmap_region(struct mm_struct *mm, ...

  8. 逆向分析war3地图

    博客已经转移 https://noone-hub.github.io/ 这个题目怪吧,地图分析,其实不然,这个地图跟软件的差别大致上来说是一样的,war3地图可以加密,软件可以加壳,war3地图内部有 ...

  9. Creator实战项目【保卫萝卜】-- 修改地图

    创建游戏主场景,拖一张格子地图放入层级管理器,把Tmx Asset中的属性删掉. 编写地图控制脚本,在TiledMapCtrl.ts中,公布一个地图资源数组,把多个格子地图拖进去. @property ...

最新文章

  1. Python基本语法_输入/输出语句详解
  2. 这些让人抓狂的烂代码,你碰到几种?
  3. alexnet训练多久收敛_卷积神经网络之AlexNet
  4. 转 安装php时报gd相关的错误(gd_ctx.c)
  5. 熊猫分发_熊猫新手:第二部分
  6. Spring中使用byType实现Beans自动装配
  7. php原生读取excel文件夹,原生php实现excel文件读写的方法分析php技巧
  8. 学会这三种贷中调额方法,今年优化list没我
  9. 学习成为一个IT架构师
  10. strcat与strncat的C/C++实现
  11. Sql Server之旅——第二站 理解万恶的表扫描
  12. SQL SERVER 不允许保存更改
  13. Excel表格文件,.xls和.xlsx格式的区别
  14. 量子世界的测不准定律
  15. 邮件群发软件使用攻略
  16. 供应链金融与区块链02——论文阅读
  17. 对新手严重不友好的强者——Nginx那些俯拾皆是的坑
  18. 课堂笔记(3) 假设检验 Hypothesis testing
  19. iOS22 地图定位- 苹果自带地图
  20. 读论文 A search-classify approach for cluttered indoor scene understanding

热门文章

  1. cpp导入excel到mysql_将EXCEL表格中的数据导入mysql数据库表中
  2. matlab中removeback的意思,remove是什么意思
  3. 使用国外著名大学数字图书馆资源方法
  4. wps文字 用WPS如何演示制作英语有声读物
  5. 无向有权图的建立(邻接链表法) 广度优先搜索 深度优先搜素
  6. 《推荐系统实践》笔记及自己的理解(一)
  7. win7+sp1安装vs2013
  8. 苹果手机怎样录屏 如何录制手机内容
  9. NYOJ-1273-宣传墙
  10. 香港主机可能遇到的攻击类型