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 对象层,取得该对象层中所有对象的坐标,并在该坐标上创建一个个心心对象。下面我们具体的讲解下代码,当然,可能结合下图要更容易理解点。

object

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

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

 

posted @ 2015-09-20 01:04  silent-bobo  阅读(990)  评论(0编辑  收藏  举报