在两点之间添加块。雪碧套件
Add block between two points. SpriteKit
我正在尝试在两点之间添加一个 SKNode
,如下图所示。
我有:
我用这段代码计算这两点之间的距离(工作正常):
func distanceCount(_ point: CGPoint) -> CGFloat {
return abs(CGFloat(hypotf(Float(point.x - x), Float(point.y - y)))) }
然后我数中间点(也可以)
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 点 A
和 B
之间的 中点 定义为
midpoint = {(A.x + B.x) / 2, (A.y + B.y) / 2}
CGPoint 扩展
所以让我们创建和扩展 CGPoint
以轻松构建一个 Midpoint
从 2 点开始
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)
要获得两点之间的角度,您需要使用以下命令
atan2(p2.y-p1.y, p2.x-p1.x)
我正在尝试在两点之间添加一个 SKNode
,如下图所示。
我有:
我用这段代码计算这两点之间的距离(工作正常):
func distanceCount(_ point: CGPoint) -> CGFloat { return abs(CGFloat(hypotf(Float(point.x - x), Float(point.y - y)))) }
然后我数中间点(也可以)
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 点 A
和 B
之间的 中点 定义为
midpoint = {(A.x + B.x) / 2, (A.y + B.y) / 2}
CGPoint 扩展
所以让我们创建和扩展 CGPoint
以轻松构建一个 Midpoint
从 2 点开始
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)
要获得两点之间的角度,您需要使用以下命令
atan2(p2.y-p1.y, p2.x-p1.x)