Sprite Kit从屏幕上移除SKNode

5
我想知道如何在屏幕外删除我的SKNodes,以帮助我的游戏更流畅地运行。
如何在Sprite Kit上实现这一点?
非常感谢。

1
请展示一下你已经尝试过的解决方案。 - Mick MacCallum
1
请参考此答案以获取类似问题的解决方案:https://dev59.com/xGAf5IYBdhLWcg3w52A_#29351327 - Imanou Petit
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,但任何精灵节点都可以),并且希望在其超出框架边界后删除该精灵,则可以使用intersects函数检查并将其从其父级中删除。 我们还检查了该精灵是否具有父级(通过检查s.parent是否不为nil),因为我们只希望删除一次该精灵。


1

https://dev59.com/xGAf5IYBdhLWcg3w52A_#24195006

这里有一个链接,可以删除超出屏幕顶部的节点。您只需要复制此代码以涵盖整个边框,并将所有墙壁的contactBitMask值设置为相同即可。

基本上,逻辑是在SKSpriteNode与您在可见屏幕外休息的physicsbodies接触时移除它们。


没问题。很高兴能够帮助你。编程愉快! - meisenman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接