我想知道如何在屏幕外删除我的SKNodes,以帮助我的游戏更流畅地运行。
如何在Sprite Kit上实现这一点?
非常感谢。
如何在Sprite Kit上实现这一点?
非常感谢。
这里是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),因为我们只希望删除一次该精灵。
https://dev59.com/xGAf5IYBdhLWcg3w52A_#24195006
这里有一个链接,可以删除超出屏幕顶部的节点。您只需要复制此代码以涵盖整个边框,并将所有墙壁的contactBitMask值设置为相同即可。
基本上,逻辑是在SKSpriteNode与您在可见屏幕外休息的physicsbodies接触时移除它们。