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

のTh E私は来ることができる最も近い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) 
関連する問題