Создание врагов, замедление игры Cocos2d - PullRequest
0 голосов
/ 11 декабря 2011

Я играю в игру, и у меня есть только 1 последняя проблема. Дело в том, что когда в игре создается враг, FPS замедляется до 40 или 20. Зависит от того, создает ли он 1 или 2 врага.

NSMutableArray *walkAnimFrames = [NSMutableArray array];
    for(int i = 1; i <= 3; ++i) {
        [walkAnimFrames addObject:
         [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
          [NSString stringWithFormat:@"laser_%d.png", i]]];
    }

    CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.12f];    
    CCSprite *laser = [CCSprite spriteWithSpriteFrameName:@"laser_1.png"];

    int tempY = (arc4random() % ((int)(300 - laser.boundingBox.size.height))) + laser.boundingBox.size.height;
    float tempRot = (arc4random() % 30) + 1;
    int sign = (arc4random() % 2) - 1;
    if (sign < 0) {
        tempRot *= -1;
    }

    laser.tag = 2;

    laser.position = ccp(650, tempY);
    laser.rotation = CC_RADIANS_TO_DEGREES(tempRot);
    CCAction *walkAction = [CCRepeatForever actionWithAction:
                            [CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:YES]];
    [laser runAction:walkAction];
    [spriteSheet addChild:laser];

    b2BodyDef spriteBodyDef;
    spriteBodyDef.type = b2_dynamicBody;
    spriteBodyDef.position.Set(laser.position.x/PTM_RATIO, 
                               laser.position.y/PTM_RATIO);
    spriteBodyDef.userData = laser;
    b2Body *spriteBody = world->CreateBody(&spriteBodyDef);

    [[GB2ShapeCache sharedShapeCache] addShapesWithFile:@"laserBody.plist"];
    [[GB2ShapeCache sharedShapeCache] addFixturesToBody:spriteBody forShapeName:@"laser_1"];
    [laser setAnchorPoint:[[GB2ShapeCache sharedShapeCache] anchorPointForShape:@"laser_1"]];

    //pixeles recoridos/velocidad del move actual
    float timeAnim = 800/(60*move);
    [laser runAction:[CCSequence actions:
                      [CCMoveBy actionWithDuration:timeAnim position:ccp(-800, 0)],
                      [CCCallFuncN actionWithTarget:self selector:@selector(obstaclesDone:)],
                      nil]];    

Я использую Physic Editor, чтобы создать форму. После этого создайте. Игра отлично работает на 60 кадрах в секунду. Но только в айфоне. По моему iMac работает отлично.

Что я могу сделать, чтобы создать его, не теряя fps. Может быть, во втором процессоре. Или другой поток?

Спасибо:)

1 Ответ

2 голосов
/ 11 декабря 2011

Каков размер и качество текстур, которые вы используете?Возможно, для создания экземпляров спрайтов требуется слишком много памяти, что затрудняет поддержание высокой частоты кадров, постоянно меняя положение этих спрайтов.Вы также можете попробовать профилирование с помощью Инструментов, чтобы увидеть, что съедает ваши процессорные циклы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...