【问题标题】:loosing fps after nodes leave screen节点离开屏幕后丢失 fps
【发布时间】:2015-02-11 20:31:12
【问题描述】:

我目前正在使用 Sprite Kit 开发一个简单的游戏。在游戏中,你是一个四处移动的方块,可以向敌人射击。你拍摄“Projectiles”,它只是一个继承自 SKSpriteNode 的自定义类。游戏一开始效果很好,但随着你继续射击,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];
    }
}

}

【问题讨论】:

  • 你在设备上测试了吗?
  • 是的,所有这些都是在设备上完成的
  • “游戏一开始还不错,但随着你继续射击,FPS 速度会慢慢下降到极低”。听起来您的代码在每次创建新弹丸时都会保留一些东西,并且尽管弹丸不在屏幕上,但仍会继续执行此操作。检查所有弹丸相关代码。
  • 你可以在update函数中移除所有穿过边缘的弹丸
  • 在屏幕上不可见的节点不会自动删除,它们将不再计入调试 fps 显示,但它们仍然存在并参与物理模拟

标签: objective-c sprite-kit skspritenode skphysicsbody


【解决方案1】:

为了提高性能,您可以在 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()
            }
        }
    }
}

【讨论】:

  • 为我工作,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多