2017-10-17 23 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

감사합니다 : 경로 임의로 복잡 할 수 있기 때문에

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)