2017-10-17 103 views
1

我正在初始化並通過SKShapeNode的紋理顯示一個SKSpriteNode,其中有一個代表圓的一部分的特定路徑。下面是一個形狀我使用一個遊樂場產生的一個示例:如何計算彎曲SKSpriteNode的「中心」點?

import SpriteKit 
import PlaygroundSupport 

let view = SKView(frame: CGRect(x: 0, y: 0, width: 300, height: 300)) 
let scene = SKScene(size: view.frame.size) 
view.presentScene(scene) 

let radius: CGFloat = view.frame.width * 0.40 

var length: CGFloat = (.pi * 2.0)/8.0 
var width: CGFloat = radius/5.0 

var path: CGPath { 

    let path = UIBezierPath(arcCenter: view.center, radius: radius, startAngle: 0.0, endAngle: length, clockwise: true) 
    path.addArc(withCenter: view.center, radius: radius - width, startAngle: length, endAngle: 0.0, clockwise: false) 

    path.close() 

    return path.cgPath 
} 

let shapeNode = SKShapeNode(path: path) 
shapeNode.fillColor = .white 
let texture = view.texture(from: shapeNode)! 

let spriteNode = SKSpriteNode(texture: texture, color: .white, size: texture.size()) 
spriteNode.position = CGPoint(x: shapeNode.frame.midX, y: shapeNode.frame.midY) 

scene.addChild(spriteNode) 

PlaygroundPage.current.liveView = view 

這產生這樣的形狀:

shape

我想添加一個內居中小的孩子SKSpriteNode彎曲節點的寬度和在所述中間弧形點像這樣:

proper shape

釷Ë最接近我能來使用spriteNode的位置:

let childNode = SKSpriteNode(color: .red, size: CGSize(width: 5, height: 5)) 
childNode.position = spriteNode.position 
scene.addChild(childNode) 

這會產生一些接近,但它使用的框架,這是完全錯誤的:

improper shape

我假設我需要做一些與弧的路徑,但我不確定如何。有人能指出我正確的方向嗎?

+2

從SKShapeNode計算是問題,因爲路徑可以任意複雜。 - 但你知道中心和角度的距離。其餘的基本三角學:) –

+1

玩得開心https://en.wikipedia.org/wiki/Centroid – Knight0fDragon

+0

有時聽到答案很容易掌握是所有需要聽到的。謝謝! – Aaron

回答

0

由於我使用一些基本的trig公司的路徑和更新來解決避免評論:

let x = (radius - width/2) * cos(length/2) + view.center.x 
let y = (radius - width/2) * sin(length/2) + view.center.y 
childNode.position = CGPoint(x: x, y: y)