节点离开屏幕后丢失 fps

loosing fps after nodes leave screen

我目前正在使用 Sprite Kit 开发一款简单的游戏。在游戏中,你是一个可以四处移动并可以射击敌人的方块。你拍摄 "Projectiles" 这只是一个继承自 SKSpriteNode 的自定义 class。该游戏起初运行良好,但随着您继续射击,FPS 率慢慢下降到极低。然而,当射弹离开屏幕时,节点数会回到射弹发射前的原始值。

我试图修复它的第一件事就是以某种方式在它们击中边缘时从场景中释放弹丸。这是我尝试这样做的代码,但它根本没有用。

-(void)didBeginContact:(SKPhysicsContact *)contact {
if (contact.bodyA.categoryBitMask == projectileCategory) {
    if (contact.bodyB.categoryBitMask == edgeCategory) {
        [contact.bodyA.node removeFromParent];
    }
} else if (contact.bodyA.categoryBitMask == edgeCategory) {
    if (contact.bodyB.categoryBitMask == projectileCategory) {
        [contact.bodyB.node removeFromParent];
    }
}

}

为了提高性能,您可以在 update 函数内移除屏幕外的弹丸。

override func update(currentTime: CFTimeInterval) {
    for node in self.children as [SKNode] {
        if node.name == "projectile" {
            if !CGRectContainsPoint(self.frame, node.position)
            {
                println("removed")
                node.removeFromParent()
            }
        }
    }
}