改变背景颜色+碰撞检测

2024-06-24 11:08

本文主要是介绍改变背景颜色+碰撞检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.让类继承CCLayerColor比如

class HelloWorld:public cocos2d::CCLayerColor{
public :



在.cpp文件中


bool HelloWorld::init(){
if(!CCLayerColor::initWithColor(ccc4(255,255,255,255))){


return false;
}
使背景颜色变为白色。


2.ccTouchesEnded(CCSet*pTouches,CCEvent*pEvent){

先取得一个点。
CCTouch*onePoint=(CCTouch*)pTouches->anyObject();             //取得一个点,。强制转换一下

CCPoint location=onePoint->getLocationInview();                //取得UI坐标系下的坐标

CCPoint loc=CCDirector::sharedDirector()->convertToNodeSpace(location);            //OPENGL

3.array删除添加难,遍历容易,

list删除添加容易,遍历难,
但是遍历fps时间就一次,但是增加删除2.0s才一次,所以存放在array中,

4.释放两个数组

HelloWorld::~HelloWorld(){
if(_projs!=NULL){
  _projs->release();           //数组释放
}    

5.关于tag

int  tag=who->getByTag();
if(tag==1){
_projs->removeObject(who);
if(tag==2){
_taget->removeObject(who);
.

6.关于update,如果是碰撞检测的话是调用update方法, 即每一帧都检测

  1. CCARRAY_FOREACH(_targets, itarget){  
  2.         CCSprite* target = (CCSprite*)itarget;  
  3. itarget是CCObject类型,这样转换一下才能得到相应的区域。
  4. 得到怪物的的矩形区域
  5. CCRect targetZone=CCRectMake(
    1. target->getPositionX(),  
    2.             target->getPositionY(),  
    3.             target->getContentSize().width,  
    4.             target->getContentSize().height);
    1. CCARRAY_FOREACH(_projs, iproj){  
    2.             CCSprite* proj = (CCSprite*)iproj;  
    3.             CCRect projZone = CCRectMake(proj->getPositionX(),  
    4.                 proj->getPositionY(),  
    5.                 proj->getContentSize().width,  
    6.                 proj->getContentSize().height);  
    进行碰撞检测  if(projZone.intersectsRect(targetZone)){       //不能再遍历的时候删除
    1. CCArray* targetToDelete = new CCArray;  
    2.     CCArray* projToDelete = new CCArray;  
    创建两个删除的array。然后把要消除的对象放入todelect集合中
  1.  projToDelete->addObject(iproj);  
  2.                 targetToDelete->addObject(itarget);  
然后遍历两个删除数组,当然这一次可以直接从删除数组中removeObject( iproj);然后强制转换,然后removeFromParentAndCleanUp();
  1. CCARRAY_FOREACH(projToDelete, iproj){  
  2.         _projs->removeObject(iproj);  
  3.         CCSprite* proj = (CCSprite*)iproj;  
  4.         proj->removeFromParentAndCleanup(true);  
  5.     }  
  6.   
  7.     CCARRAY_FOREACH(targetToDelete, itarget){  
  8.         _targets->removeObject(itarget);  
  9.         CCSprite* target = (CCSprite*)itarget;  
  10.         target->removeFromParentAndCleanup(true);  
  11.     }  
最后把两个删除数组释放掉
targetToDelete->release();
projToDelete->release();
7.
  1. void HelloWorld::update(float delta) // delta = 1.0 / fps  
  2. {  
  3.     CCArray* targetToDelete = new CCArray;  
  4.     CCArray* projToDelete = new CCArray;  
  5.     CCObject* itarget;  
  6.     CCObject* iproj;  
  7.     CCARRAY_FOREACH(_targets, itarget){  
  8.         CCSprite* target = (CCSprite*)itarget;  
  9.   
  10.         CCRect targetZone = CCRectMake(target->getPositionX(),  
  11.             target->getPositionY(),  
  12.             target->getContentSize().width,  
  13.             target->getContentSize().height);  
  14.   
  15.         CCARRAY_FOREACH(_projs, iproj){  
  16.             CCSprite* proj = (CCSprite*)iproj;  
  17.             CCRect projZone = CCRectMake(proj->getPositionX(),  
  18.                 proj->getPositionY(),  
  19.                 proj->getContentSize().width,  
  20.                 proj->getContentSize().height);  
  21.   
  22.             if (projZone.intersectsRect(targetZone)){  
  23.                 projToDelete->addObject(iproj);  
  24.                 targetToDelete->addObject(itarget);  
  25.             }  
  26.         } // end of iterate projectile  
  27.   
  28.   
  29.     } // end of iterate target  
  30.   
  31.     CCARRAY_FOREACH(projToDelete, iproj){  
  32.         _projs->removeObject(iproj);  
  33.         CCSprite* proj = (CCSprite*)iproj;  
  34.         proj->removeFromParentAndCleanup(true);  
  35.     }  
  36.   
  37.     CCARRAY_FOREACH(targetToDelete, itarget){  
  38.         _targets->removeObject(itarget);  
  39.         CCSprite* target = (CCSprite*)itarget;  
  40.         target->removeFromParentAndCleanup(true);  
  41.     }  
  42.   
  43.     targetToDelete->release();  
  44.     projToDelete->release();}  

这篇关于改变背景颜色+碰撞检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089973

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

第49课 Scratch入门篇:骇客任务背景特效

骇客任务背景特效 故事背景:   骇客帝国特色背景在黑色中慢慢滚动着! 程序原理:  1 、 角色的设计技巧  2 、克隆体的应用及特效的使用 开始编程   1、使用 黑色的背景: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d74c872f06b4d9fbc88aecee634b074.png#pic_center)   2

数据中台出现的背景

数据中台产生背景 数据建设中出现的问题 在企业数据建设过程中,都离不开大数据平台建设,大数据平台建设涉及数据采集、数据存储、数据仓库构建、数据处理分析、数据挖掘、数据可视化等一系列流程。 随着企业体量不断增大,一个企业可能有总公司及很多子公司,随着企业各类业务多元化和垂直业务发展,从全企业角度来看,每个子公司或者某些独立的业务部都在构建大数据分析平台,在企业内部形成了很多分散、烟囱式、独立的

PNG透明背景按钮的实现(MFC)

问题描述: 当前要在对话框上添加一个以两个PNG图片作为背景的按钮,PNG图的背景是透明的,按钮也要做出相同的透明效果。并且鼠标不在按钮上时,按钮显示"bg1.png";鼠标移动到按钮上时,按钮显示"bg2.png" 开发环境为VS2010。 解决办法: 使用GDI+库装载PNG图片,并使用MFC Button Control和CMFCButton类结合,调用CMFCButton

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli