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

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

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

时间: 2024-12-24 06:46:47

Quick-cocos2d-x3.3 Study (十四)--------- 遍历 TiledMap 中的对象层,并取得所有坐标的相关文章

二十四、Struts2中的UI标签

二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) 可以使用OGNL表达式 模板: 常量设置的:struts.ui.theme=xhtml 开发中建议设置为struts.ui.theme=simple;

全栈JavaScript之路(十四)HTML5 中与class属性相关的扩充

1. getElementByClassName() :支持getElementsByClassName()方法的浏览器有IE 9+.Firefox 3+.Safari 3.1+.Chrome 和 Opera 9.5+. 2. classList 属性 :  classList 属性是新集合类型 DOMTokenList  的实例.DOMTokenList 类型有一个lenght 属性 ,表示包含了多少子元素,要取得每一个元素可以通过item() 方法访问,也可以用 [ ] 方法 访问. 此外这

设计模式之十四:Decorator(装饰)—对象结构型模式

2014-06-15 星期日 10:42:12  Decorator,继续GOF. 1.Intent Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality 动态地给一个对象添加一些额外的职责.就增加功能来说, Decorator模式相比生成子类更为灵活. 2.A

第十四单元 linux中的设备访问

第十四单元 linux中的设备访问 一 设备访问 1 设备识别 /dev/xdxn:硬盘设备/dev/sda1 /dev/cdrom:光驱 /dev/mapper/*:虚拟设备 2.设备的使用 查看设备: fdisk -l:查看真实存在的设备 cat /proc/partitions:系统能够识别的设备 blkid:系统能够挂载使用的设备id df:查看设备被系统使用的情况 设备挂载: mount 设备挂载点 mount /dev/sdb1/mnt#把系统中第二块硬盘的第一个分区挂载到/mnt目

设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用户界面框架中的 Window 对象可以收集任意数量的控制对象 - Menu.Slider 和 Button.并且,集合的实现可以有多种方式:PHP 数字是一个集合,但也是一个散列表,一个链接列表,一个堆栈以及队列. 例子1:电视遥控器的频道遍历 2.问题 如何操纵任意的对象集合? 如一个列表(Lis

第三十四课 Spark中任务处理的Stage划分和Task最佳位置算法

本节课的内容 1.     Job Stage的划分算法 2.     Task最佳计算位置算法 一.Stage划分算法 由于Spark的算子构建一般都是链式的,这就涉及了要如何进行这些链式计算,Spark的策略是对这些算子,鲜花分Stage,然后在进行计算. 由于数据是分布式的存储在各个节点上的,所以为了减少网络传输的开销,就必须最大化的追求数据本地性,所谓的数据本地性是指,在计算时,数据本身已经在内存中或者利用已有缓存无需计算的方式获取数据. 1.      Stage划分算法思想 (1)一

轻松学习JavaScript十四:JavaScript的RegExp对象(正则表达式)

一RegExp对象概述 RegExp对象表示正则表达式,RegExp是正则表达式的缩写,它是对字符串执行模式匹配的强大工具.RegExp 对象用于规定在文本中检索的内容.当您检索某个文本时,可以使用一种模式来描述要检索的内容.RegExp就是这 种模式.简单的模式可以是一个单独的字符:更复杂的模式包括了更多的字符,并可用于解析.格式检查.替换等. 正则表达式可以规定字符串中的检索位置,以及要检索的字符类型等. 二创建RexExp对象 创建正则表达式和创建字符串类似,创建正则表达式有两种方式: (

(六十四)Android中Intent传递对象的两种方法(Serializable,Parcelable)

转载自:http://blog.csdn.net/android_tutor/article/details/5740845 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable

[ExtJS5学习笔记]第二十四节 Extjs5中表格gridpanel或者表单数据后台传输remoteFilter设置

本文地址:http://blog.csdn.net/sushengmiyan/article/details/39667533 官方文档:http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.data.Store-method-getFilters 本文作者:sushengmiyan ----------------------------------------------------------------------------------