如何检查两个 SKSpriteNode 是不是彼此靠近?

Posted

技术标签:

【中文标题】如何检查两个 SKSpriteNode 是不是彼此靠近?【英文标题】:How can i check if two SKSpriteNodes are near each other?如何检查两个 SKSpriteNode 是否彼此靠近? 【发布时间】:2017-06-15 19:29:04 【问题描述】:

如何检查两个 SKSpriteNode 是否彼此靠近?就像在 100 半径内一样。我正在使用 gamescene.swift 和 gamescene.sks。

【问题讨论】:

【参考方案1】:

SKSpriteNode 有一个带有 (x, y) 的位置属性。

两个位置之间的距离是sqrt((x1-x2)^2 + (y1-y2)^2)

所以:

let dist = sqrt(pow(sk1.position.x - sk2.position.x, 2.0) + pow(sk1.position.y - sk2.position.y, 2.0))
if dist < 100 
    // they are close

这是中心到中心。

根据@MartinR 的评论,您也可以

let dist = hypot(sk1.position.x - sk2.position.x, sk1.position.y - sk2.position.y)

距离对你有什么作用。

【讨论】:

还有一个方便的hypot函数:) 给精灵一个大的物理体并使用接触检测?【参考方案2】:

如果你想使用内置的 SKPhysicsBody,那么只需将 body 设置为半径为 100 的圆,然后在发生接触时可以使用 didBeginContact 方法:

func setup()

    let physicsBody1 = SKPhysicsBody(circleOfRadius:100.0)
    physicsBody1.categoryBitMask = 1
    physicsBody1.collisionBitMask = 0
    physicsBody1.contactTestBitMask = 2
    sprite1.physicsBody = physicsBody1


    let physicsBody2 = SKPhysicsBody(circleOfRadius:100.0)
    physicsBody2.categoryBitMask = 2
    physicsBody2.collisionBitMask = 0
    physicsBody2.contactTestBitMask = 1
    sprite2.physicsBody = physicsBody2



func didBeginContact(contact:SKPhysicsContact)

  //find some tutorials to your liking, and do your contact code here

【讨论】:

以上是关于如何检查两个 SKSpriteNode 是不是彼此靠近?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查两个单词是不是是字谜

检查两个 NSArray 是不是包含彼此的对象 (NSManagedObject)

如何检查一个 sknode 是不是触及另一个

一种可能的算法来确定两个字符串是不是是彼此的字谜? [关闭]

Overring touchesEnded in SKSpriteNode - 检查场景中是不是有任何节点在点下

如何检查数组中的所有值是不是彼此相等。 C++