改变背景颜色+碰撞检测

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

你可能感兴趣的:(改变背景颜色+碰撞检测)