如何在 Sprite Kit 场景外时删除节点
How to remove node when become outside the scene in Sprite Kit
我试图在离开场景时删除节点,我尝试了这种方法来做到这一点
if( CGRectIntersectsRect(node.frame, view.frame) ) {
// Don't delete your node
} else {
// Delete your node as it is not in your view
}
但它似乎不起作用任何帮助将不胜感激
从性能的角度来看,这不是最佳方法,但如果您在场景中重写 update
方法,您将能够编写每帧执行的代码。
class GameScene : SKScene {
var arrow : SKSpriteNode?
override func update(currentTime: NSTimeInterval) {
super.update(currentTime)
if let
arrow = arrow,
view = self.view
where
CGRectContainsRect(view.frame, arrow.frame) == false &&
CGRectIntersectsRect(arrow.frame, view.frame) == false {
arrow.removeFromParent()
}
}
}
注意事项
请记住,您在更新方法中编写的每个代码都会每帧执行(在 60fps 游戏中每秒执行 60 次),因此您应该非常小心.
除非绝对必要,否则您不想在 update
中写入的典型内容:
- 对象的创建
- 大循环
- 递归 调用
- 任何需要太多时间才能执行的疯狂代码
希望对您有所帮助。
我试图在离开场景时删除节点,我尝试了这种方法来做到这一点
if( CGRectIntersectsRect(node.frame, view.frame) ) {
// Don't delete your node
} else {
// Delete your node as it is not in your view
}
但它似乎不起作用任何帮助将不胜感激
从性能的角度来看,这不是最佳方法,但如果您在场景中重写 update
方法,您将能够编写每帧执行的代码。
class GameScene : SKScene {
var arrow : SKSpriteNode?
override func update(currentTime: NSTimeInterval) {
super.update(currentTime)
if let
arrow = arrow,
view = self.view
where
CGRectContainsRect(view.frame, arrow.frame) == false &&
CGRectIntersectsRect(arrow.frame, view.frame) == false {
arrow.removeFromParent()
}
}
}
注意事项
请记住,您在更新方法中编写的每个代码都会每帧执行(在 60fps 游戏中每秒执行 60 次),因此您应该非常小心.
除非绝对必要,否则您不想在 update
中写入的典型内容:
- 对象的创建
- 大循环
- 递归 调用
- 任何需要太多时间才能执行的疯狂代码
希望对您有所帮助。