使用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价格会慢慢贬值?
如果需要更多信息,请告知我们,我会更新这篇文章。
答案 0 :(得分:0)
我有类似的问题。它可能是SKEmitterNodes。继续玩它们,降低出生率和寿命,甚至范围等。如果问题仍然存在,看看你是否可以把它们拿出来。它可能看起来不太好,但有时你必须牺牲功能。此外,我建议可能会在不同的时间和高度出现碎片,因此您仍然可以使用全屏,还可以获得平滑的屏幕。