以前的代码中并有设置行数这个概念,但是植物大战僵尸这个游戏里确实是有一个概念的,那怎么设置行数呢?个人认为,每一行都有一个僵尸的行走路径,并且路径之间是不交叉的,那么我们就可以先生成路径,然后在生成terrain的时候检测当前和那个路径发生了碰撞,如果发生碰撞,就获取这个折线的所在行数,传递给terrain,然后把terrain添加到对应的容器中
这个行数是跟植物的攻击方式有关的,植物的攻击方式有以下几种(不考虑玉米加农炮)
1.植物所在行有僵尸就攻击
豌豆类植物 胆小喷菇 仙人掌等
2植物所在行有僵尸,且需要获取第一个僵尸的位置
卷心菜 玉米 西瓜
3感应区域内有僵尸,就进行攻击
大小喷菇 杨桃 忧郁蘑菇 猫尾草 土豆雷
4定时攻击
樱桃炸弹 火爆辣椒等
因为 有的植物(如豌豆类)攻击需要根据当前所在行数,获取所在行的僵尸,所以需要行数这个概念。
所以我在tmx添加一个对象层,为zombie path
这个是折线
并且内部有一个属性,表示当前第几行
然后在LevelLayer中读取并解析
void LevelLayer::loadZombiePath()
{auto groupGroup = m_pTiledMap->getObjectGroup("zombie path");auto &objects = groupGroup->getObjects();
    //对对象进行解析,cocos2dx的对象是Value,所以需要按照一定格式解析for (const auto& object : objects){ZombiePath*zombiePath = new ZombiePath();const auto &dict = object.asValueMap();auto x = dict.at("x").asInt();auto y = dict.at("y").asInt();auto properties = dict.at("properties").asValueMap();auto points = dict.at("polyline").asValueVector();for (const auto& dict : points){const auto&point = dict.asValueMap();auto realX = x + point.at("x").asInt();auto realY = y + point.at("y").asInt();zombiePath->points.push_back(Point(realX,realY));}zombiePath->row = properties.at("row").asInt();m_zombiePathVec.push_back(zombiePath);}
}
更改terrain的存储方式为 map<int,vector<Terrain*>> m_terrains,每一行保存一行的塔基terrain
void LevelLayer::makeTerrainCallback(Terrain*terrain)
{//检测该地形在第几行auto rect = terrain->getBoundingBox();for (auto zombiePath : m_zombiePathVec){const auto& points = zombiePath->points;auto row = zombiePath->row;for (int i = 0;i < points.size() - 1;i++){auto pos1 = points.at(i);auto pos2 = points.at(i + 1);if (rect.intersectLine(pos1,pos2)){m_terrains[row].push_back(terrain);//添加到实体层auto layer = this->getEntityLayer();layer->addChild(terrain);}}}
}
这个函数是先获取当前的塔基的包围盒,然后再和当前的行走路径判断,如果相交,则表示此行即为塔基所在的行,

至于那个intersectLine,这个不是cocos2dx的函数,是我自己加上的,因为SDL有着对应的实现,为SDL_IntersectRectAndLine()

这些都是为了以后的植物所做的准备。。。下一节也是如此

cocos2dx 植物大战僵尸 5 塔基Terrain的更新相关推荐

  1. cocos2dx 植物大战僵尸 17 路障僵尸

    原版植物大战僵尸的路障是饰品,能阻挡一部分伤害,在路障掉落前路障僵尸是不会受伤的. 如下为个人头脑风暴. 路障僵尸使用装饰者的话,需要继承自ZombieBase,由于图片原因,所以内部需要有一个普通僵 ...

  2. cocos2dx 植物大战僵尸 18 土豆雷

    土豆雷是我打植物大战僵尸时喜欢使用的植物,它能保证在开局时能快速地种植植物.今天就实现土豆雷. 土豆雷有一个准备时间,在准备时间完成前不具有任何攻击力.以后破土,能够炸死小范围的僵尸,之后土豆雷死亡. ...

  3. cocos2dx 植物大战僵尸 8 植物类和向日葵的小更新

    这次实现容器类的植物,即睡莲和花盆 不过在写之前,需要重写下以前的Plant代码. /*植物类型*/ enum class PlantType {Common,//普通类植物Vessel,//容器类植 ...

  4. cocos2dx 植物大战僵尸 22 寒冰射手

    寒冰射手是我目前感觉比较难的植物,因为这个植物的子弹会给僵尸一个减速的debuff的,而这个debuff对有的僵尸 起作用,比如一般的僵尸,而对带有报纸的僵尸或者一些特殊的僵尸也是不会减速的,所以饰品 ...

  5. cocos2dx 植物大战僵尸 10 铲子的实现

    铲子的作用是移除植物,而且铲子是和卡片互斥的,即点击了卡片,再点击铲子时会取消卡片的选中,反之亦然,接下来看看铲子的实现吧 class Shovel : public Entity { private ...

  6. cocos2dx 植物大战僵尸 20 卷心菜投手

    在实现卷心菜投手前,需要对以前的代码进行稍微地调整.因为以前仅仅实现了豌豆射手,所以不需要关注第一个僵尸的位置,而卷心菜投手就不同了,它是锁定第一个最靠近的僵尸,然后进行攻击的,所以需要对僵尸进行x轴 ...

  7. PC休闲游戏~植物大战僵尸-植物连连看v1.0正式发布啦(更新iPhone版本)!

    11.29: 又稍微花了一些时间制作了HD的iPad版本,不过提交app store审核失败了,侥幸看来真的只有一次啊 -增加计分(done) -增加关卡选择(done) 6.14: 看到卖的很悲惨, ...

  8. C++开源游戏推荐,植物大战僵尸(Cocos2dx开源项目)

    声明:项目非本人原创,仅仅分享链接! 声明:项目非本人原创,仅仅分享链接! 声明:项目非本人原创,仅仅分享链接! 原创请参见: C++ 重制植物大战僵尸(Cocos2dx开源项目)_尔灵尔亿的博客-C ...

  9. Python开发植物大战僵尸游戏(附github项目地址)

    今天给大家分享一个仿<植物大战僵尸>的小游戏开发案例. 开发思路 引入需要的模块,配置图片路径,设置界面宽高背景颜色,创建游戏主入口. #1引入需要的模块 import pygame im ...

最新文章

  1. 图说:Windows 8使用搜索,快速开启应用
  2. async [ə'zɪŋk] 函数
  3. c语言编译器内部错误,C++致命错误C1001:编译器中发生内部错误
  4. 双linux grub rescue,Grub Rescue修复方法
  5. 有关nginx upstream的几种配置方式
  6. python3 os模块相关方法
  7. python绘图数字_绘制一个绘图,其中Yaxis文本数据(非数字)和Xaxis数字d
  8. cmd指令大全指令_数控加工中心编程技巧及指令大全,请转给需要的数控人!
  9. 【DFS】LeetCode 52. N-Queens II
  10. 【前端】数组元素过滤
  11. 385.迷你语法分析器
  12. 你真的了解LinkedBlockingQueue的put,add和offer的区别吗
  13. [维修案例] 艾美特电风扇(FS4085R)不能调风量维修
  14. 解决刷新页面Vuex数据丢失问题
  15. 问佛----如果浮躁了,静下来看看
  16. word删除分页符的两种方法
  17. 深度学习-活体检测发展之数据篇(二)
  18. 印度尼西亚通过新区块链项目改善其航运产业
  19. 「经济读物」牛奶可乐经济学
  20. 什么是区块链,区块链又是什么?

热门文章

  1. 如何在ASP.NET网络应用实现数据可视化图表
  2. 【Pyhton TurtleArt】画一幅极简渐变风景图
  3. 本地生活O2O行业已经逐渐渗透到日常生活中
  4. 魔众微信管理系统 v1.0.0 更简单可用的微信公众号管理系统
  5. 从零开始构建嵌入式实时操作系统2——重构
  6. 导出word功能,用html代码在word中插入分页符
  7. PHP 索引数组合并
  8. 富文本编辑器 —— 学习笔记
  9. 如何设置Xiuno BBS URL-Rewrite(伪静态设定)
  10. 如何进行音频录制?实用的音频录制方法合集