Проблема с процессором в проекте 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 ответ
Только что обнаружил проблему!
Я не удаляю эти объекты из массива, когда удаляю их из родительского объекта. Таким образом, размер массива продолжает расти, и, наконец, вызывает раздавливание.
Спасибо за ответы!