5

我想知道如何在我的 SKNodes 离开屏幕时删除它们,以帮助我的游戏运行得更顺畅。

如何在 Sprite Kit 上执行此操作

非常感谢

4

2 回答 2

2

这是 Swift 4 中的一个简单解决方案:

class GameScene: SKScene {
    let s = SKLabelNode(fontNamed: "Chalkduster")

    override func didMove(to view: SKView) {
      s.text = "test"
      s.fontSize = 50
      addChild(s)

      let moveRight = SKAction.moveBy(x: 40, y: 0, duration: 0.5)
      s.run(SKAction.repeatForever(moveRight))
    }

    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
        if ((s.parent != nil) && !intersects(s)) {
            s.removeFromParent()
            print("Sprite removed.")
        }
    }
}

您有一个SKLabelNode水平移动的精灵(在本例中为 a 但任何精灵节点都可以),并且您想在超出帧边界时删除该精灵。

您可以使用该intersects函数来检查这一点,然后从其父级中删除该精灵。我还检查了精灵在删除之前是否有父对象(通过检查是否s.parent不为零),因为我们希望只删除一次精灵。

于 2018-04-22T12:26:24.860 回答
1

https://stackoverflow.com/a/24195006/2494064

这是一个答案的链接,它删除了屏幕顶部的节点。您只需复制它以覆盖整个边界并将所有墙壁设置为具有相同的 contactBitMask 值。

基本上,逻辑是在 SKSpriteNodes 接触到您在可见屏幕外休息的物理体时移除它们。

于 2014-06-25T14:37:49.570 回答