射击小游戏一03(碰撞检测)

/* 申明数组的时候一定要注意retain:比如  

_targets =  CCArray::create();

 _targets->retain();

*/

 

voidHelloWorld::update(CCTime dt)

{

    CCArray *projectilesToDelete = CCArray::create();

    projectilesToDelete->retain();

    

    for (int i = 0; i < _projectiles->count(); i++)

    {

        CCSprite *projectile = (CCSprite*)(_projectiles->objectAtIndex(i));

        CCRect projectileRect = CCRectMake(

                                           projectile->getPosition().x

                                           - (projectile->getContentSize().width/2),

                                           projectile->getPosition().y

                                           - (projectile->getContentSize().height/2),

                                           projectile->getContentSize().width,

                                           projectile->getContentSize().height);

        

        CCArray *targetsToDelete = CCArray::create();

        targetsToDelete->retain();

        for (int j = 0; j < _targets->count(); j++)

        {

            CCSprite *target = (CCSprite *)(_targets->objectAtIndex(j));

            CCRect targetRect = CCRectMake(

                                           target->getPosition().x - (target->getContentSize().width/2),

                                           target->getPosition().y - (target->getContentSize().height/2),

                                           target->getContentSize().width,

                                           target->getContentSize().height);

            

          //  if (CCRect::CCRectIntersectsRect(projectileRect, targetRect))

            if (projectileRect.intersectsRect(targetRect))

            {

                targetsToDelete->addObject(target);

            }

        }

        for (int k = 0; k < targetsToDelete->count(); k++)

        {

            CCSprite *target = (CCSprite *)(targetsToDelete->objectAtIndex(k));

            _targets->removeObject(target);

            this->removeChild(target, true);

        }

        

        if (targetsToDelete->count() >0)

        {

            projectilesToDelete->addObject(projectile);

        }

        targetsToDelete->release();

    }

    for (int l = 0; l < projectilesToDelete->count(); l++)

    {

        CCSprite* projectile =  (CCSprite *)(projectilesToDelete->objectAtIndex(l));

        _projectiles->removeObject(projectile);

        this->removeChild(projectile, true);

    }

    projectilesToDelete->release();

}

 

posted on 2013-04-14 10:00  jack_yan  阅读(424)  评论(0编辑  收藏  举报