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

}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Darknet-53_darknet_track

    Darknet-53_darknet_track今天想下载这个文件,百度一搜,好多博主要收费才能下载,我就奇怪了,这玩意又不是他自己脑力活动创造的代码,收啥费啊,现在免费分享这个链接:链接:https://pan.baidu.com/s/17yywRWP-IaGXT6es1u5_-A提取码:fggd各位看官,拿走的时候顺便点个赞吧。20204.24…

    2022年10月30日
  • 万洲金业平台上炒黄金亏损了怎么办?「建议收藏」

    万洲金业平台上炒黄金亏损了怎么办?「建议收藏」  由于受国际行情变化影响,黄金市场很难长时间维持单边走势,因此金价起伏波动不断才是正确的打开方式。尽管黄金价格不断变化为人们营造了良好的盈利空间,但对于大多数人来说,尽管亏损是难以避免的,但真当风险来临,还是难以接受。所以今天就详细介绍一下当人们在万洲金业平台上发生了炒金亏损之后应该怎么办。万洲金业是一家专业的黄金交易平台,为人们提供了极为周到的黄金投资服务,也借助良好的市场表现成为了不少人的炒金选择。即便如此也不能代表平台客户不会发生黄金投资亏损。  在万洲金业平台上炒黄金,一旦发生了交易亏损,

  • Centos部署禅道项目管理软件

    Centos部署禅道项目管理软件

  • Python if用法_if语句的用法例子

    Python if用法_if语句的用法例子if语句的语法及其实例等…..

  • map改变一个字母是什么_组合总和 leetcode

    map改变一个字母是什么_组合总和 leetcode原题链接给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[ [“ate”,”eat”,”tea”], [“nat”,”tan”], [“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。tclass Solution {public: vector<vector<string>> g

  • Spring Security CAS认证

    Spring Security CAS认证13.7CAS认证13.7.1概述JA-SIG生产一种称为CAS的企业级单点登录系统。与其他计划不同,JA-SIG的中央身份验证服务是开源的,广泛使用的,易于理解,独立于平台,并支持代理功能。SpringSecurity完全支持CAS,并提供从SpringSecurity的单应用程序部署到企业级CAS服务器保护的多应用程序部署的轻松迁移路径。您可以在https://www.ape…

发表回复

您的电子邮箱地址不会被公开。

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