cocos2d基础篇笔记四

cocos2d基础篇笔记四

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

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);
}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118493.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 计算机应用网线接口亮红灯,网线插在电脑上网口灯不亮是为什么?

    计算机应用网线接口亮红灯,网线插在电脑上网口灯不亮是为什么?1、网线插在电脑上网口灯不亮,应该是接触不良。2、如有你已经把上网的网线,插在了路由器的WAN口,但是WAN口指示灯仍然不亮。这时候,请检查以下几个方面的问题:检查网线是否插好,网线是否有问题。3、如果确认网线没有松动,已经插好了;但是,WAN口指示灯还是不亮的话。那么,就有可能是插在路由器WAN口的网线有问题,导致路由器WAN口检测不到信号,所以路由器WAN口指示灯不亮。4、建议大家尽量使用质量…

    2022年6月26日
    125
  • C#中如何为参数SqlDbType.Decimal指定精度与小数位数

    C#中如何为参数SqlDbType.Decimal指定精度与小数位数 在.net中操作数据库的时候,我们更多的是推荐使用参数化来传值,但这其中就会产生一些疑惑,比如使用Decimal时如何保持与数据库中一样的精度与小数位数呢? 利用参数的Precision与Scale的属性即可,示例如下: ///<summary> ///更新一条数据 ///</summary> publicDictionaryEntryUpdate…

    2022年7月20日
    16
  • SpringAOP学习–SpringAOP简介及原理

    SpringAOP学习–SpringAOP简介及原理前文对AOP做了介绍,实际项目中,一般不会直接上手手动实现aop,而是使用一些高级封装的aop实现,如SpringAOP。Spring是一个广泛应用的框架,SpringAOP则是Spring提供的一个标准易用的aop框架,依托Spring的IOC容器,提供了极强的AOP扩展增强能力,对项目开发提供了极大地便利。前文提到AOP的实现有AspectJ、JDK动态代理、CGLIB动态代理,SpringAOP不是一种新的AOP实现,其底层采用的是JDK/CGLIB动态代理。JDK动态代理回顾上一篇简单介绍了

    2022年8月11日
    5
  • 何为文件句柄??_窗口句柄是什么意思

    何为文件句柄??_窗口句柄是什么意思一、百度百科解释:在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(filehandle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该…

    2022年10月9日
    0
  • s一般怎么称呼自己的m_75.9%的职场人,都不知道怎么称呼自己的领导

    s一般怎么称呼自己的m_75.9%的职场人,都不知道怎么称呼自己的领导包邮送!人力资源制度手册纸质版和电子版23套制度覆盖员工入职到离职各环节82份表格制度配套全面规范附赠电子版可复制可编辑原价49元纸质版+电子版包邮送!!!最后30本!扫码回复【100】立抢!来源:猎聘(ID:liepinwang)作者:放学堵他谁能想到「怎么称呼别人」这样看似简单到不能再简单的问题,居然会成为让职场萌新发懵,甚至打怵的究极难题。不要以为这是什么夸张的说…

    2022年6月23日
    87
  • 数组按照出现次数排列

    数组按照出现次数排列数组按照出现次数排列

    2022年4月24日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号