博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quick-cocos2d-x3.3 Study (十四)--------- 遍历 TiledMap 中的对象层,并取得所有坐标...
阅读量:6555 次
发布时间:2019-06-24

本文共 2492 字,大约阅读时间需要 8 分钟。

 遍历 TiledMap 中的对象层,并取得所有坐标

 

1 -- 将心心添加到背景层中 2 function BackgroundLayer:addHeart(  ) 3     -- body 4     -- getObjectGroup 方法从地图中获取到指定的对象层(也就是个 ObjectGroup 对象组对象), 5     -- 对象组 ObjectGroup 中包含了多个对象, 6     -- 所以我们可以通过 getObjects 方法从 ObjectGroup 中获得所有的对象。 7     -- objects 在这里就相当于一个存放了多个对象的数组。 8     local objects = self.map:getObjectGroup("heart"):getObjects() 9 10     -- dict 是个临时变量,用它来存储单个的对象;table.getn 方法能得到数组的长度11     local dict = nil12     local i = 013     local len = table.getn(objects)14 15     -- 遍历 objects 数组16     for i = 0, len - 1, 1 do17         dict = objects[i + 1]18         -- 如果对象 dict 为空,则跳出 for 循环19         if dict == nil then20             break21         end22         -- 取出相应的属性值,即对象坐标。因为对象组中的对象在 TMX 文件中是以键值对的形式存在的,23         -- 所以我们可以通过它的 key 得到相应的 value。24         local key = "x"25         local x = dict["x"]26         key = "y"27         local y = dict["y"]28 29         -- 在获取到的坐标上创建 Heart 对象,并把它添加到 TiledMap 背景层上。30         -- 这样创建的心心才能跟随着背景层的滚动而滚动。31         local sprite = Heart.new(x, y)32         self.map:addChild(sprite)33     end34 35 end

 

可以封装这个函数

1 -- 封装加载函数 2 function BackgroundLayer:addBody( objectGroupName, class ) 3     -- body 4     local objects = self.map:getObjectGroup(objectGroupName):getObjects() 5     local dict = nil 6     local i = 0 7     local len = table.getn(objects) 8  9     for i = 0, len - 1, 1 do10         dict = objects[i + 1]11 12         if dict == nil then13             break14         end15 16         local key = "x"17         local x = dict["x"]18         key = "y"19         local y = dict["y"]20 21         local sprite = class.new(x, y)22         self.map:addChild(sprite)23 24         -- 在创建鸟这个游戏对象时,我们需要把所有的鸟都添加到定义的 self.bird 数组中。25         -- 所以在 addBody 方法中,我们需要加上一则判断:26         -- 即当创建的对象是鸟(bird)时,就把该对象插入 self.bird27         if objectGroupName == "bird" then28             table.insert(self.bird, sprite)29         end30 31     end32 end

 

addHeart方法的作用是遍历 TiledMap 中的 heart 对象层,取得该对象层中所有对象的坐标,并在该坐标上创建一个个心心对象。下面我们具体的讲解下代码,当然,可能结合下图要更容易理解点。

  1. getObjectGroup 方法从地图中获取到指定的对象层(也就是个 ObjectGroup 对象组对象),对象组 ObjectGroup 中包含了多个对象,所以我们可以通过 getObjects 方法从 ObjectGroup 中获得所有的对象。objects 在这里就相当于一个存放了多个对象的数组。
  2. dict 是个临时变量,用它来存储单个的对象;table.getn 方法能得到数组的长度。
  3. 遍历 objects 数组。
  4. 如果对象 dict 为空,则跳出 for 循环。
  5. 取出相应的属性值,即对象坐标。因为对象组中的对象在 TMX 文件中是以键值对的形式存在的,所以我们可以通过它的 key 得到相应的 value。
  6. 在获取到的坐标上创建 Heart 对象,并把它添加到 TiledMap 背景层上。这样创建的心心才能跟随着背景层的滚动而滚动。

之后,在程序中调用 addHeart,我们就可以创建出一系列的奖励品了。

 

转载于:https://www.cnblogs.com/dudu580231/p/4822733.html

你可能感兴趣的文章
NoSQL生态系统——一致性RWN协议,向量时钟,gossip协议监测故障
查看>>
用Windows Live Writer发布日志到BlogBus
查看>>
解决公司服务器加入域中不能启动应用系统的问题
查看>>
解压缩 操作
查看>>
rsyslog收集nginx日志配置
查看>>
consule服务注册和发现 安装 部署
查看>>
多个帐户都用root 来登录 怎么看另一个用户使用的那些命令
查看>>
Redis小记
查看>>
Map集合案例
查看>>
《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷
查看>>
C# for循环①护栏长度 ②广场砖面积 ③判断闰年平年
查看>>
mysql数据库中,查看数据库的字符集(所有库的字符集或者某个特定库的字符集)...
查看>>
LintCode刷题——打劫房屋I、II、III
查看>>
第七次课程作业
查看>>
C++ 文本查询2.0(逻辑查询)
查看>>
Objective-C学习总结-13协议1
查看>>
web学习方向
查看>>
寒假训练营第四次作业
查看>>
SQLServer 维护脚本分享(05)内存(Memory)
查看>>
A*算法实现
查看>>