在两点之间添加块。 SpriteKit

时间:2016-11-18 17:22:54

标签: ios swift sprite-kit sknode

我想在两点之间添加SKNode,如下图所示。

enter image description here

我拥有的:

    1. 我用这段代码计算这两点之间的距离(工作正常):

       func distanceCount(_ point: CGPoint) -> CGFloat {
       return abs(CGFloat(hypotf(Float(point.x - x), Float(point.y - y))))  }
      
    1. 然后我计算中间点(也可以正常工作)

        func middlePointCount(_ point: CGPoint) -> CGPoint {
        return CGPoint(x: CGFloat((point.x + x) / 2), y: CGFloat((point.y + y) / 2))
         }
      

最后这个函数添加了我的对象(SKNode):

func addBlock(_ size:CGSize, rotation:CGFloat, point: CGPoint) -> SKNode{

        let block = SKSpriteNode(color: UIColor.lightGray , size: size)
        block.physicsBody = SKPhysicsBody(rectangleOf: block.frame.size)
        block.position = point //This is my middle point
        block.physicsBody!.affectedByGravity = false
        block.physicsBody!.isDynamic = false
        block.zRotation = rotation 

        return block

    }

摘要:我的addBlock函数会在正确的位置添加具有正确宽度的对象,但角度是错误的。

注意:我试图创建应该计算角度的函数,但它们都错了:/。

我的问题:我如何才能找到正确的角度,或者是否有其他方法可以达到我的目标?

如果您需要更多详情,请告诉我。

谢谢:)

2 个答案:

答案 0 :(得分:3)

中点

2点AB之间的中点定义为

midpoint = {(A.x + B.x) / 2, (A.y + B.y) / 2}

CGPoint扩展

让我们创建和扩展CGPoint以便从2点开始轻松构建Midpoint

extension CGPoint {
    init(midPointBetweenA a: CGPoint, andB b: CGPoint) {
        self.x = (a.x + b.x) / 2
        self.y = (a.y + b.y) / 2
    }
}

测试

现在让我们测试一下

let a = CGPoint(x: 1, y: 4)
let b = CGPoint(x: 2, y: 3)

let c = CGPoint(midPointBetweenA: a, andB: b) // {x 1,5 y 3,5}

看起来不错?

总结

现在给出2分,你只需计算中点并将其分配到SKNode的位置。

let nodeA: SKNode = ...
let nodeB: SKNode = ...
let nodeC: SKNode = ...

nodeC.position = CGPoint(midPointBetweenA: nodeA.position, andB: nodeB.position)

答案 1 :(得分:3)

要获得两点之间的角度,您需要使用以下

atan2(p2.y-p1.y, p2.x-p1.x)