【问题标题】:Creating enemies, slowing game Cocos2d制造敌人,减缓游戏 Cocos2d
【发布时间】:2011-12-11 01:17:24
【问题描述】:

我正在做一个游戏,我只遇到了 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]];    

我正在使用物理编辑器来创建形状。创建后。游戏在 60 fps 下运行良好。但仅限于 iPhone。在我的 iMac 上完美运行。

如何在不丢失 fps 的情况下创建它。也许在第二个处理器中。还是其他线程?

谢谢:)

【问题讨论】:

    标签: iphone cocos2d-iphone


    【解决方案1】:

    您使用的纹理的大小和质量如何?可能是创建精灵实例需要太多内存,这使得难以保持高帧速率不断改变这些精灵的位置。您还可以尝试使用 Instruments 进行分析,看看是什么占用了您的处理器周期。

    【讨论】:

    • 我的激光每帧大约 97k (3)。我将在仪器中运行它并查看。也许我可以做到大约 50k。但 iPhone 300k 不算什么
    • 我认为仪器说一切正常。虚拟内存使用:121mb 真实内存:10mb。 1 16 字节泄漏。 6 个线程 [在 mi imac 上] 和 0.4% 的处理器在 iPhone 中约占 25%。我真的看到了什么奇怪的东西。我无法用我的 iPhone 测试仪器,因为它断开连接
    • @Ernesto 您可能想尝试降低纹理的大小,以消除此问题。我正在开发每帧动画为 12KB 的游戏。并不是说 iPhone 无法处理它,但 97k 对于单个动画帧来说似乎有点高。在仪器中,您应该查看时间分析器,以了解哪些函数执行时间最长。
    • 我检查了所有的分析器,我发现当我检查成就时,检查和更新大约需要 100 毫秒或更长时间。我在后台运行,只有当你完成它并且你还没有得到它时才在本地检查它并将它发布到游戏中心。我认为这就是问题所在。因为我这样做了,每件事都会再次正常工作。谢谢:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多