我想知道如何在我的 SKNodes 离开屏幕时删除它们,以帮助我的游戏运行得更顺畅。
如何在 Sprite Kit 上执行此操作
非常感谢
我想知道如何在我的 SKNodes 离开屏幕时删除它们,以帮助我的游戏运行得更顺畅。
非常感谢
这是 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
不为零),因为我们希望只删除一次精灵。
https://stackoverflow.com/a/24195006/2494064
这是一个答案的链接,它删除了屏幕顶部的节点。您只需复制它以覆盖整个边界并将所有墙壁设置为具有相同的 contactBitMask 值。
基本上,逻辑是在 SKSpriteNodes 接触到您在可见屏幕外休息的物理体时移除它们。