2010-12-03 81 views
0

我一直在使用一个非常好的教程各2只母鸡(6个图像),而我试图动画(母鸡行走)三个简单的图像由Ray Wenderlich:每秒帧速率(FPS)在Coco2d游戏iPhone中开始下降?

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]; 
+0

如果您需要帮助,可能需要发布一些代码。 – 2010-12-03 04:59:57

+0

我已经添加了代码...当我尝试用泄漏工具运行它时,它显示没有泄漏,但对象分配相当高,因为我也尝试每1秒用计时器调用此代码? – hemant 2010-12-03 08:56:54

回答

1

听起来像你可能有内存泄漏。我的建议是在设备上运行Leaks和ObjectAlloc仪器。此外,如果您需要更详细的帮助,您应该发布相关代码。

+0

这也是我的假设。 – 2010-12-03 05:24:39

0

内存泄漏似乎最有可能。

如果不是这样,那么我会考虑一些事情,比如你正在遍历的数据结构,你随着时间的推移建立的任何类型的决策树元素,这种事情。任何不一定存在内存泄漏的地方,但有些东西可能会合法地变得庞大或复杂,这就需要增加处理时间。

如果应用程序必须每秒处理数次这样的事情,那么一切都会变慢。它可能是这样的一种情况,即它几分钟内变得复杂或者大得多,并且早期的加倍仍然是快速且容易计算的。当它从原来的256倍增加到原来的256倍时,减速开始变得明显。