zoukankan      html  css  js  c++  java
  • 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,我们就可以创建出一系列的奖励品了。

  • 相关阅读:
    pythonchallenge10
    线程同步
    查缺补漏
    查看QQ是否在线
    project euler10
    Toon Shading, step 2
    一种简易的卡通渲染方法(上)
    GLSL学习笔记 9.1 Transformation
    Gloss Mapping
    一种简易的卡通渲染方法(下)
  • 原文地址:https://www.cnblogs.com/dudu580231/p/4822733.html
Copyright © 2011-2022 走看看