2011-12-11 75 views
0

我正在做一個遊戲,而我只有1個最終的問題。當遊戲創造一個敵人時,FPS會減慢到40或20,取決於它是否會造成1或2個敵人。創造敵人,減慢遊戲速度Cocos2d

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

我正在使用物理編輯器來創建形狀。創建後。遊戲在60 fps下工作正常。但只限於iPhone。在我的iMac完美作品。

我能做些什麼來創建它而不會丟失fps。也許在第二個處理器中。或另一個線程?

謝謝:)

回答

2

什麼是您使用的紋理的大小和質量?可能需要太多的內存才能創建精靈實例,這使得難以保持高幀率不斷改變這些精靈的位置。您還可以嘗試使用樂器分析來查看處理器週期的消耗情況。

+0

我的激光約97k每幀(3)。我將在樂器中運行並看看。也許我可以做到約50k。但是對於iPhone而言,它不是什麼 – Edig

+0

我認爲樂器說一切都很好。虛擬內存使用量:121MB實際內存:10MB。 1泄漏16字節。 iPhone上有6個線程[mi imac]和0.4%處理器,約爲25%。我真的看到任何奇怪的東西。我無法使用我的iPhone測試樂器,因爲它不願意測試 – Edig

+1

@Ernesto您可能想嘗試降低紋理的大小以消除此問題。我正在製作一個每幀動畫爲12KB的遊戲。並不是說iPhone不能處理它,但97k對於單個動畫幀來說似乎有點高。在儀器中,您應該查看時間分析器,以瞭解哪些功能需要最長時間來執行。 –