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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python算法(1)抓交通肇事犯「建议收藏」

    python算法(1)抓交通肇事犯「建议收藏」抓交通肇事犯1.问题描述一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下了车号的一些特征。甲说:牌照的前两位数字是相同的:乙说:牌照的后两位数字是相同的,但与前两位

    2022年7月31日
    3
  • 回溯法求解N皇后问题及其时间复杂度分析

    回溯法求解N皇后问题及其时间复杂度分析回溯法求解N皇后问题及其时间复杂度分析一、回溯法简介1.什么是回溯法?2.回溯法的时间复杂度分析蒙特卡罗方法蒙特卡罗方法在回溯法求解时间复杂度中的应用二、回溯法求解N皇后问题1.回溯法求解N皇后问题的过程2.回溯法求解N皇后问题的时间复杂度2.1求解时的效率分析回溯法进行效率分析的代码2.2时间复杂度分析一、回溯法简介1.什么是回溯法?  相信”迷宫”是许多人儿时的回忆,大家小时候一定都玩过迷宫游戏。我们从不用别人教导,都知道走迷宫的策略是:当遇到一个岔路口,会有以下两种情况:存

    2022年9月30日
    5
  • C++ 逻辑与或非 逻辑与逻辑或 逻辑非

    C++ 逻辑与或非 逻辑与逻辑或 逻辑非逻辑运算符 与 或 非 amp amp 作用 根据表达式的值返回真值或者假值逻辑非 include iostream usingnamespa intmain 在 C 中 除了 0 都是真 inta 10 cout lt a endl cout a endl system pause return0 逻辑与 iostream

    2025年7月3日
    5
  • linux fusion io简介,linux – 收集FusionIO库存

    linux fusion io简介,linux – 收集FusionIO库存我需要编写一个脚本,从Linux服务器收集FusionIO驱动器的库存数据.我能找到的唯一方法是fio-status实用程序,但它的目的是输出人类可读的文本,而不是机器可解析的文本.我可以刮它,但那很脏.我检查/proc/fusion但它没有足够的信息可供任何使用.我希望有更好的方法,可以通过某种方式与libiodrivesdk.so或已经存在的实用程序进行交互来完成这项工作.我最初使用的是…

    2025年8月21日
    3
  • 数据库置疑的解决方法_msdb数据库置疑的解决方法

    数据库置疑的解决方法_msdb数据库置疑的解决方法在没有数据库日志的情况下数据的恢复:由于误删的事务日志文件,导致数据库无法启动(置疑状态),数据无法取去,方法:新建一个同名数据库,把数据文件copy覆盖打开系统表的操作权限UseMasterGosp_configure’allowupdates’,1reconfigurewithoverrideGo设置成为紧急状态updatesysdatabasessetstatus=32…

    2022年8月20日
    7
  • docker启动mysql容器失败_docker 进入容器

    docker启动mysql容器失败_docker 进入容器实现命令如下:[root@localhost/]#dockersearchmysql(查找mysql镜像,此处如果无法获取到镜像,则可能是网络问题,需要保证虚拟机可以联网)[root@localhost/]#dockerpullmysql(拉取mysql镜像)[root@localhost/]#dockerimagels(查看所有的镜像)[root@…

    2022年10月5日
    3

发表回复

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

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