Частота кадров в секунду (FPS) начинает увеличиваться в игре Coco2d для iPhone? - PullRequest
0 голосов
/ 03 декабря 2010

у меня есть три простых изображения для каждого из двух кур (6 изображений), которые я пытаюсь оживить (выгула курицы), используя очень хороший урок Рэя Вендерлиха:

http://www.raywenderlich.com/1271/how-to-use-animations-and-sprite-sheets-in-cocos2d

Анимация работает нормально, когда я запускаю игру, но через 2-3 минуты частота кадров начинает падать и медленно падает до уровня ниже 10, а приложение зависает. Кстати, я использую iPhone 3G с iOS 4.1 ... могу что является причиной падения FPS или просто iPhone через некоторое время бездействует?

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"hen.plist"];        


CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"hen.png"];
[self addChild:spriteSheet];

// Load up the frames of our animation
NSMutableArray *walkAnimFrames = [NSMutableArray array];
for(int i = 1; i <= 3; ++i) {
    [walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"%d.png", i]]];
}
CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.1f];

self.bear = [CCSprite spriteWithSpriteFrameName:@"1.png"];        
_bear.position = ccp(20,400);
self.walkAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO]];
[_bear runAction:_walkAction];
[spriteSheet addChild:_bear];

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"monkey.plist"];        


CCSpriteBatchNode *spriteSheetMonkey = [CCSpriteBatchNode batchNodeWithFile:@"monkey.png"];
[self addChild:spriteSheetMonkey];

NSMutableArray *walkAnimFramesMonkey = [NSMutableArray array];
for(int i = 1; i <= 3; ++i) {
    [walkAnimFramesMonkey addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"%d.png", i]]];
}
CCAnimation *walkAnimMonkey = [CCAnimation animationWithFrames:walkAnimFramesMonkey delay:0.1f];


self.monkey = [CCSprite spriteWithSpriteFrameName:@"1.png"];        
_monkey.position = ccp(40,80);
self.walkMonkey = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:walkAnimMonkey restoreOriginalFrame:NO]];
[_monkey runAction:_walkMonkey];
[spriteSheetMonkey addChild:_monkey];
float bearVelocity = 480.0/3.0;

CGPoint moveDifferenceHen = ccpSub(HenLoction, _bear.position);
float distanceToMoveHen = ccpLength(moveDifferenceHen);
float moveDurationHen = distanceToMoveHen / bearVelocity;

self.moveAction = [CCSequence actions:                          
                       [CCMoveTo actionWithDuration:moveDurationHen position:HenLoction],
                       [CCCallFunc actionWithTarget:self selector:@selector(bearMoveEnded)],
                       nil
                       ];


[_bear runAction:_moveAction]; 

Ответы [ 2 ]

1 голос
/ 03 декабря 2010

Похоже, у вас утечка памяти. Мой совет - запускать инструменты Leaks и ObjectAlloc на устройстве. Кроме того, вы должны опубликовать соответствующий код, если вы хотите более подробную помощь.

0 голосов
/ 03 декабря 2010

Утечка памяти кажется наиболее вероятной.

Если это не так, я бы посмотрел на такие вещи, как структуры данных, которые вы пересекаете, на любые виды элементов дерева решений, которые вы строите с течением времении тому подобное.Все, что не обязательно приводит к утечке памяти, но что-то может на законных основаниях становиться большим или сложным, требующим увеличения времени обработки.

Если приложению приходится работать несколько раз в секунду, все будет замедляться.Это может быть такая вещь, когда она становится вдвое сложнее или крупнее за несколько минут, а ранние удвоения все еще быстры и просты для вычисления.Когда он удваивается, скажем, в 256 раз сложнее, чем оригинал, до 512 раз, замедление начинает становиться очевидным.

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