Проблема с процессором в проекте cocos2d - простой проект работает очень медленно

Спасибо за ваше время, читая это!

Я использовал Cocos2d и Box2d в моем проекте. Логика проекта довольно проста. Игрок просто стреляет по врагам. Если пуля попадает в противника, пуля, а также враг будут уничтожены. Если любой враг проходит по экрану без выстрела, то игра окончена. Часть кода выглядит следующим образом:

- (void)birdDone:(ZLBird*) birdToDelete {

CCSprite *sprite = (CCSprite *)birdToDelete;

b2Body *spriteBody = NULL;
for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) {
    if (b->GetUserData() != NULL) {
        CCSprite *curSprite = (__bridge CCSprite *)b->GetUserData();
        if (sprite == curSprite) {
            spriteBody = b;
            break;
        }
    }
}

if (spriteBody != NULL) {
    world->DestroyBody(spriteBody);
}
[sprite removeFromParentAndCleanup:YES];
sprite = NULL;
}


-(void) update:(ccTime)delta{

SOME CODE HERE

for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
    CCSprite *myActor = (__bridge CCSprite*)b->GetUserData();
    if (b->GetUserData() != NULL)
    {
        //Synchronize the AtlasSprites position and rotation with the corresponding body
        myActor.position = (CGPointMake( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO));
        myActor.rotation = (-1 * CC_RADIANS_TO_DEGREES(b->GetAngle()));
    }
}

// goes through all the rocks
for (ZLRock *rockToAct in rocksArr){
    [rockToAct incrementTime];
    if ([rockToAct getExistedTime] >= 400)
    {
        // Remove the rock several seconds after it has been shot
        [self rockDone:rockToAct];
    }
}

// goes through all the elements in BirdsArr
for (ZLBird *birdToAct in birdsArr){
    [birdToAct incrementTime];
    if ([birdToAct getDeadTime] >= 400 || birdToAct.position.x > WIDTH_WINDOW+20)
    {
        // Remove the bird several seconds after it has been dead
        [self birdDone:birdToAct];
    }

    // JUST FOR TEST
    if (birdToAct.position.x > WIDTH_WINDOW && !birdToAct.isDead)
        NSLog(@"YOU LOSSSSSSSS!");
}

Когда я запускаю этот проект на своем iphone, как-то он становится очень медленным. Я проверил использование процессора на приборах, загрузка процессора составляет около 70%.

Это почему? Я предполагаю, что нет никакой утечки памяти, так как я включил ARC. Это потому, что я прохожу несколько массивов в каждом кадре, и это действительно замедляет работу устройства?

Спасибо за вашу помощь!

1 ответ

Решение

Только что обнаружил проблему!

Я не удаляю эти объекты из массива, когда удаляю их из родительского объекта. Таким образом, размер массива продолжает расти, и, наконец, вызывает раздавливание.

Спасибо за ответы!

Другие вопросы по тегам