如何判断屏幕上是否有节点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,它们没有定位点。最后,我使用了一个为锚定点调整的相对帧(与屏幕大小相同,但原点为负数)。然后我使用这个新的相对帧的相交。