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

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

【问题讨论】:

    标签: ios swift swift3 sprite-kit


    【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      相关资源
      最近更新 更多