1.//有两种集合

//第一种是array 特点:插入,删除效率低,可是查找效率高

//另外一种是list  特点:插入,删除效率高,可是查找效率低

//分析这个游戏: 插入的时候:怪物,射弹出现时,删除的时候:碰撞时,怪物、射弹出界时。

//遍历:fps(每秒中填充图像的帧数(帧/秒)相应的时间,怪物是2秒出现一次,而遍历是60次每秒,可见遍历用的较多,所以我们选择array。

CCArray*_targets;//定义怪物集合,3.0一般用vector定义集合

CCArray*_projs;//定义射弹集合

2.集合的初始化和释放

_targets=new CCArray;

_projs=new CCArray;

//cocos2d中Class:create不须要手动释放

//new须要手动释放,我们把它放在析构函数释放。

HelloWorld::~HelloWorld(){

if(_targets!=NULL)

_targets->release();

if(_projs!=NULL)

_projs->release();

}

3.开启update函数(默认是没激活的)

this->schedule(schedule_selector(HelloWorld::update));//开启update函数

4.集合的遍历:

void HelloWorld::update(float dt){                                               //dt为刷新周期=1/fps

CCObject*itarget;

CCObject*iproj;

CCArray*targetToDelect=new CCArray;                         //假设当有交集时就直接从容器移除而且清楚靶子或者射弹会导致下次遍历越域,因此我们又一次定义两个集合来保                                                                                                            
  存,发生碰撞的靶子和射弹,然后在遍历这两个集合在进行移除和清理,就不会发生越域的情况。

CCArray*projToDelect=new CCArray;                            

CCARRAY_FOREACH(_targets,itarget){                           //为了方便遍历容器里面的元素,cocos2dx提供了CCARRAY_FOREACH这种宏

CCSprite*target=(CCSprite*)itarget;

CCRect targetZone=CCRectMake(target->getPositionX(),

target->getPositionY(),

target->getContentSize().width,

target->getContentSize().height);





CCARRAY_FOREACH(_projs,iproj){

CCSprite*proj=(CCSprite*)iproj;

CCRect projZone=CCRectMake(proj->getPositionX(),

proj->getPositionY(),

proj->getContentSize().width,

proj->getContentSize().height);





if(projZone.intersectsRect(targetZone)){

targetToDelect->addObject(itarget);

projToDelect->addObject(iproj);

}

}                                                              //遍历怪物

}                                                                     / /遍历靶子

CCARRAY_FOREACH(targetToDelect,itarget){

_targets->removeObject(itarget);

CCSprite*target=(CCSprite*)itarget;

target->removeFromParentAndCleanup(true);

}

CCARRAY_FOREACH(projToDelect,iproj){

         _projs->removeObject(iproj);

CCSprite*proj=(CCSprite*)iproj;

proj->removeFromParentAndCleanup(true);

}





}

cocos2d基础篇笔记四的更多相关文章

  1. 小猪猪C++笔记基础篇(四)数组、指针、vector、迭代器

    小猪猪C++笔记基础篇(四) 关键词:数组,Vector. 一.数组与指针 数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据.例如:int a[10],意思就是从a开始 ...

  2. python基础篇(四)

    PYTHON基础篇(四) 内置函数 A:基础数据相关(38) B:作用域相关(2) C:迭代器,生成器相关(3) D:反射相关(4) E:面向对象相关(9) F:其他(12) 匿名函数 A:匿名函数基 ...

  3. Python成长笔记 - 基础篇 (四)函数

    1.面向对象:类(class) 2.面向过程:过程(def) 3.函数式编程:函数(def)----python   1.函数:http://egon09.blog.51cto.com/9161406 ...

  4. Python学习笔记之基础篇(四)列表与元祖

    #### 列表 li = ['alex','wusir','egon','女神','taibai'] ###增加的3种方法 ''' # append li.append('日天') li.append ...

  5. python学习之路基础篇(第四篇)

    一.课程内容回顾 1.python基础 2.基本数据类型  (str|list|dict|tuple) 3.将字符串“老男人”转换成utf-8 s = "老男人" ret = by ...

  6. Mysql基础篇(笔记)

    mysql数据库是由DB跟DBMS跟sql组成 DB 数据库仓库 DBMS 数据库管理系统 SQL 一门通用的数据库语言   数据库启动命令 : 关闭->net stop MySQL || 开启 ...

  7. Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

    第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service m ...

  8. Java基础学习笔记四 Java基础语法

    数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻 ...

  9. cocos2d0基础篇笔记一

    1.了解了基本的几个类:Director(导演),Scene(场景),Layer(层),Sprite(精灵): 2.创建精灵: CCSize visiblesize=CCDirector::share ...

随机推荐

  1. fatal error LNK1123: failure during conversion to COFF: file invalid or corr

    新装VS2010出现标题的错误,使用了下面的方法,不行 这个是由于日志文件引起的,可以将 项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是"是",改成"否&q ...

  2. IO库 8.3

    题目:什么情况下,下面的while循环会终止? while(cin >> i) /* ... */ 解答:当读取发生错误时上述while循环会终止.比如i是整形,却输入非整形的数:输入文件 ...

  3. oracle 两表数据对比---minus

        1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进 ...

  4. Oracle 游标Cursor 的基本用法

    查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中.SELECT ...

  5. 9_Permanent Storage

    9 // // ViewController.swift // Permanent Storage // // Created by ZC on 16/1/9. // Copyright © 2016 ...

  6. 解决Flex4 发布后访问 初始化极其缓慢的问题

    原文http://blog.163.com/vituk93@126/blog/static/170958034201282222046364/ 昨天找了个免费.net空间,想测试一下做的一个简单Fle ...

  7. TCP/IP笔记 三.运输层(2)——TCP 流量控制与拥塞控制

    TCP 的流量控制与拥塞控制可以说是一体的.流量控制是通过滑动窗口实现的,拥塞避免主要包含以下2个内容: (1)慢开始,拥塞避免 (2)快重传,快恢复 1.流量控制——滑动窗口 TCP采用大小可变的滑 ...

  8. Android使用XML全攻略(1)

    Android使用XML全攻略(1)    Android 是针对移动设备的一种新兴的开源操作系统和 SDK.借助它,您可以创建功能强大的移动应用程序.当您的应用程序可以访问 Web 服务时,其吸引力 ...

  9. BingMap的GeocodeService进行地理位置正向和反向检索--后台实现

    一.加入GeocodeService的Web服务引用 地理编码服务(GeocodeService)是以WCF技术公布的一个Web服务,地图编码服务提供了以一个有效的物理地址在地图上匹配其相应的地图地址 ...

  10. HDU 1002 A + B Problem II(大整数相加)

    A + B Problem II Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u De ...