如何判断屏幕上是否有节点spritekit swift

如何判断屏幕上是否有节点spritekit swift,swift,sprite-kit,Swift,Sprite Kit,我试图找出如何确定节点在屏幕上还是屏幕外可见。这只是节点的真/假属性吗? 谢谢(使用swift spritekit)不直接,但您可以使用其位置进行检查。因此,您可能会这样做: if (/*the node's position is between 0 and the screen's .x and .y*/) { //on screen } 希望有帮助:)您可以使用CGRectIntersectsRect提供您的SKSpriteNode和SKScene的框架。例如: if !CGRe

我试图找出如何确定节点在屏幕上还是屏幕外可见。这只是节点的真/假属性吗?
谢谢(使用swift spritekit)

不直接,但您可以使用其位置进行检查。因此,您可能会这样做:

if (/*the node's position is between 0 and the screen's .x and .y*/) {
    //on screen
}

希望有帮助:)

您可以使用
CGRectIntersectsRect
提供您的
SKSpriteNode
SKScene
框架。例如:

if !CGRectIntersectsRect(frame, spriteNode.frame) {
    // Outside the bounds of the scene because the frames are no longer intersecting.
}

可以使用以下方法测试节点是否在场景中:

if (!intersectsNode(sprite)) {
  println("node is not in the scene")
}

这假设
self
是一个
SKScene
子类,例如
gamesene

如果
SKScene
符合其包含的
视图,则应该可以:

if !node.intersectsNode(node.parent!) {
     // node is off-scene/out-of-view
}

其中
node
SKNode
的子节点,它是
SKScene

如果在场景中放置SKCameraNode,则可以使用
contains
方法检查节点是否在相机视图内:


您还可以使用
containedNodeSet
实例方法获取相机可见的所有节点。

这里的最佳答案是:

if scene.frame.contains(myNode.position) {
//do stuff
}

“intersect”方法非常繁重,涉及太多计算,如果在许多实例上使用,可能会产生延迟

否,节点上没有任何属性指示精灵在屏幕上或屏幕下。当节点离开屏幕时,也没有任何通知。你应该自己计算。你可以从这个开始:另一个可能的解决方案是在场景周围创建基于边缘的物理体,当节点离开屏幕时,didBeginContact将被触发(我想,这可能是一个更有效的解决方案)搜索。这更应该给他一个想法,而不是实际的代码。我更改了它以使其更清楚。因此,如果您的节点是另一个节点的子节点,那么这似乎不起作用,我将如何检查这一点?我有一个叫做backgroundNode的节点,它的位置在屏幕的中间(场景的锚点在左下角(0,0))。然后我将我的子节点添加到backgroundNode。现在我的子节点的位置是(0, 0),它是我的后台节点的中心,所以它出现在屏幕的中间。问题是,当我对这个子节点应用一个力时,它的位置将变为负值,并且由于场景帧从(0,0)开始,所以“相交”将返回false。如何处理此问题?@Minimi尝试设置
backgroundNode.ancorpoint=CGPoint(x:0.5,y:0.5)
backgroundPoint.position=CGPoint.zero
。您可能需要相应地更改子节点的位置。背景节点是SKNode,它们没有定位点。最后,我使用了一个为锚定点调整的相对帧(与屏幕大小相同,但原点为负数)。然后我使用这个新的相对帧的相交。