如何在sprite工具包中保持fps速率不变?

时间:2014-04-06 17:40:26

标签: ios iphone objective-c sprite-kit

使用sprite-kit框架构建iOS游戏。游戏在大约第一分钟内保持平稳运行(保持60 fps速率),但随着玩家进入游戏,帧速率开始缓慢下降。随着时间的推移它甚至可以降至8 fps。我认为这是游戏中增加的碎片和障碍的结果,所以我努力在一段时间后从父母那里删除了很多。这就是游戏的设置方式:

游戏中有不同类型的碎片有6 NSMutableArrays。这是每种格式:

-(void)spawnDebris6 {

    SKSpriteNode * debris6 = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"debris6.png"] size:CGSizeMake(20, 20)];
    debris6.zPosition = 1.0;

    SKEmitterNode *debrisTrail = [SKEmitterNode kitty_emitterNamed:@"Dtrail"];
    debrisTrail.zPosition = -1.0;
    debrisTrail.targetNode = self;

    [debris6 addChild:debrisTrail];

    debris6.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:25];
    debris6.physicsBody.allowsRotation = NO;
    debris6.physicsBody.categoryBitMask = CollisionDebris;

    //set up a random position for debris
    //RandomPosition = arc4random() %248;
    //RandomPosition = RandomPosition + 10;
    debris6.position = CGPointMake (302, self.size.height + 65);

    [_debris6 addObject:debris6];
    [self addChild:debris6];

    //next Spawn:
    [self runAction:[SKAction sequence:@[
                                         [SKAction waitForDuration:deb6Time],
                                         [SKAction performSelector:@selector(spawnDebris6) onTarget:self],
                                         ]]];

    if (_dead == YES) {
        [self removeAllActions];
    }

    if (debris6.position.y > 568) {
        [self removeFromParent];
    }
}

NSMutableArrays中的每一个随着时间的推移出现 - 第一个出现在0s,2 @ 10s,3 @ 40s,4 @ 80s等等。当一个新的出现时,我添加了代码来制作前者一些出现频率较低,也删除一些(降低帧速率)但我仍然注意到约90秒后帧速率较慢。

我不明白为什么这会影响帧速率,因为我已经最小化了粒子的出生率和寿命,并且努力删除和减慢碎片的产卵率随着时间的推移。为什么FPS价格会慢慢贬值?

如果需要更多信息,请告知我们,我会更新这篇文章。

1 个答案:

答案 0 :(得分:0)

我有类似的问题。它可能是SKEmitterNodes。继续玩它们,降低出生率和寿命,甚至范围等。如果问题仍然存在,看看你是否可以把它们拿出来。它可能看起来不太好,但有时你必须牺牲功能。此外,我建议可能会在不同的时间和高度出现碎片,因此您仍然可以使用全屏,还可以获得平滑的屏幕。