Quick-cocos2d-x3.3 Study (十四)--------- 遍历 TiledMap 中的对象层,并取得所有坐标
遍历 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 = nil 12 local i = 0 13 local len = table.getn(objects) 14 15 -- 遍历 objects 数组 16 for i = 0, len - 1, 1 do 17 dict = objects[i + 1] 18 -- 如果对象 dict 为空,则跳出 for 循环 19 if dict == nil then 20 break 21 end 22 -- 取出相应的属性值,即对象坐标。因为对象组中的对象在 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 end 34 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 do 10 dict = objects[i + 1] 11 12 if dict == nil then 13 break 14 end 15 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.bird 27 if objectGroupName == "bird" then 28 table.insert(self.bird, sprite) 29 end 30 31 end 32 end
addHeart方法的作用是遍历 TiledMap 中的 heart 对象层,取得该对象层中所有对象的坐标,并在该坐标上创建一个个心心对象。下面我们具体的讲解下代码,当然,可能结合下图要更容易理解点。
- getObjectGroup 方法从地图中获取到指定的对象层(也就是个 ObjectGroup 对象组对象),对象组 ObjectGroup 中包含了多个对象,所以我们可以通过 getObjects 方法从 ObjectGroup 中获得所有的对象。objects 在这里就相当于一个存放了多个对象的数组。
- dict 是个临时变量,用它来存储单个的对象;table.getn 方法能得到数组的长度。
- 遍历 objects 数组。
- 如果对象 dict 为空,则跳出 for 循环。
- 取出相应的属性值,即对象坐标。因为对象组中的对象在 TMX 文件中是以键值对的形式存在的,所以我们可以通过它的 key 得到相应的 value。
- 在获取到的坐标上创建 Heart 对象,并把它添加到 TiledMap 背景层上。这样创建的心心才能跟随着背景层的滚动而滚动。
之后,在程序中调用 addHeart,我们就可以创建出一系列的奖励品了。