改变背景颜色+碰撞检测

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

相关文章

第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

渐变颜色填充

GradientFill函数可以对特定的矩形区域或者三角形区域进行渐变颜色的填充。我们先来看看GradientFill函数到底长得什么样子,帅不帅。 [cpp]  view plain copy print ? BOOL GradientFill(     _In_  HDC hdc,     _In_  PTRIVERTEX pVertex,     _In_  ULONG

【前端】animation动画以及利用vue制作简单的透明度改变动画,包含vue生命周期实现

一. 问题描述 想做一个文字透明度从1到0然后再从0到1的css动画。 二. 代码写法 2.1 animation写法 2.1.1 animation属性key 2.1.2 代码展示 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=de

AIGC大模型智能抠图(清除背景):Sanster/IOPaint,python(2)

AIGC大模型智能抠图(清除背景):Sanster/IOPaint,python(2)   在文章(1)的基础上,尝试用大模型扣除图中的某些主要景物。 1、首先,安装插件: pip install rembg   2、第1步安装成功,启动webui,注意,这里要启用清除背景/抠图的插件 --enable-remove-bg : iopaint start --model=lama

【虚拟机/服务器】非图形化界面下修改Shell中颜色的设置

1、首先 cd ~ && ll 可以看到如下图所示 2、输入 sudo vim .bashrc 进入 .bashrc 并通过 /PS1 迅速从上往下定位第一个PS1 3、输入 i 进入插入模式后修改 else 下面的配置如下 说明:\e[1;32;40m] 其中1表示高亮显示,32表示字体颜色是绿色,40表示背景色为黑色 4、输入 esc 退出编辑模式到命令模式,再输入

【python】Python中如何通过rembg实现图片背景去除

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Dj