私はノードツリーが表示矩形に正確に収まるように正しいスケーリング係数を決定しようとしているので、すべてのノードの周りで最小の境界矩形を見つけようとしています。 Appleのドキュメントによると、calculateAccumulatedFrameは、ノードの内容とそのすべての子孫の内容を含む親座標系の矩形を計算します。それは私の必要なもののように聞こえるが、それは私に私が期待する緊密なフィット感を与えていない。calculateAccumulatedFrameで予期しないCGRectが発生するのはなぜですか?
import SpriteKit
import PlaygroundSupport
let view:SKView = SKView(frame: CGRect(x: 0, y: 0, width: 800, height: 800))
PlaygroundPage.current.liveView = view
let scene:SKScene = SKScene(size: CGSize(width: 1000, height: 800))
scene.scaleMode = SKSceneScaleMode.aspectFill
view.presentScene(scene)
let yellowBox = SKSpriteNode(color: .yellow, size:CGSize(width: 300, height: 300))
yellowBox.position = CGPoint(x: 400, y: 500)
yellowBox.zRotation = CGFloat.pi/10
scene.addChild(yellowBox)
let greenCircle = SKShapeNode(circleOfRadius: 100)
greenCircle.fillColor = .green
greenCircle.position = CGPoint(x: 300, y: 50)
greenCircle.frame
yellowBox.addChild(greenCircle)
let uberFrame = yellowBox.calculateAccumulatedFrame()
let blueBox = SKShapeNode(rect: uberFrame)
blueBox.strokeColor = .blue
blueBox.lineWidth = 2
scene.addChild(blueBox)
そして結果は以下のとおりです:私の完全な遊び場コードがある青い四角形の
左と下縁は良く見えるが、なぜ青い長方形と上の緑の円の間にギャップがありますトップと右?
これは意味があります。 「フレームは、サブツリー内の各ノードのxScale、yScale、およびzRotationプロパティの累積的な影響をアカウントに取り込みます」と、各ノード(尺度と回転を含む)に対して四角形が計算されたと考えました。あなたが説明したものの代わりに、彼らはすべて団結していました。ありがとう。 – mike663
ノードごとに長方形が計算されても、それは_rectangle_です。あなたのサークルが長方形であるとふりをすると、これはあなたにとってははるかに意味をなさないでしょう。確かに、あなたの円を矩形で描く;何が起こっているのかをより良く理解することができます。 – matt
良い提案。 greenCircleからgreenBoxに変更すると、回転した四角形の周りにブルーボックスがぴったりと表示されます。再度、感謝します。 – mike663