[英]How to keep fps rate constant in 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等。當出現一個新的NSMutableArrays
時,我添加了代碼,使以前的出現頻率降低,並且將其刪除一些(降低幀速率),但我仍然注意到約90秒后幀速率降低了。
我不明白為什么這會影響幀速率,因為我已將粒子的出生率和壽命降到最低,並努力刪除並減慢了碎片隨時間的生成速度。 為什么FPS速率緩慢貶值?
如果需要更多信息,請告訴我,我將更新此帖子。
我有一個類似的問題。 可能是SKEmitterNodes。 繼續與他們一起玩耍,降低出生率和壽命,甚至降低范圍等等。如果問題仍然存在,請查看是否可以將它們取出。 它可能看起來不那么好,但是有時您必須犧牲對功能的外觀。 另外,我建議您最好讓碎片出現在不同的時間和高度,這樣您就可以擁有全屏顯示,而且運行畫面也很流暢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.