Расположение SKShapeNodes друг над другом для графических эффектов

У меня есть несамопересекающийся многоугольник произвольной формы SKShapeNode A. В качестве графического эффекта я хотел бы расположить другой SKShapeNode B со шкалой 0,7 поверх A.

Я потерян в системе координат Sprite-Kits. Я не могу заставить SKShapeNode B правильно позиционироваться. Это должно быть простой проблемой, но я застрял с этим. ВСЕ ПОМОЩЬ ЦЕНЫ!

                    createdShape.name = "whiteArea"
                    createdShape.strokeColor = shapeBorderColor
                    createdShape.lineWidth = 0.0
                    createdShape.fillColor = shapeFillColor
                    createdShape.alpha = 1.0
                    createdShape.zPosition = shapeZPosition
                    createdShape.glowWidth = 3.0

                    let graphicAddonShape = createdShape.copy() as! SKShapeNode 
                    graphicAddonShape.setScale(0.7)
                    graphicAddonShape.lineWidth = 0
                    graphicAddonShape.zPosition = shapeZPosition + 1
                    graphicAddonShape.fillColor = UIColor(red:  15/255, green: 15/255, blue: 15/255, alpha: 1.0)
                    graphicAddonShape.name = "blackArea"
                    graphicAddonShape.physicsBody = nil

                    graphicAddonShape.position.x = createdShape.frame.width/2 - graphicAddonShape.frame.width/2
                    graphicAddonShape.position.y = createdShape.frame.height/2 - graphicAddonShape.frame.height/2
                    createdShape.addChild(graphicAddonShape)
                    self.addChild(createdShape)

1 ответ

Вот полная игровая площадка Xcode, использующая ваш код, плюс я добавил немного кода сверху, чтобы создать сцену и установить некоторые переменные для обводки, цвета заливки и т. Д.

//: Playground - noun: a place where people can play

import UIKit
import SpriteKit
import XCPlayground

let sceneView = SKView(frame: CGRect(x: 0, y: 0, width: 480, height: 320))

let scene = SKScene(size: CGSize(width: 480, height: 320))

sceneView.presentScene(scene)

XCPShowView("My Scene", view: sceneView)

var createdShape = SKShapeNode(circleOfRadius: 35)
let shapeBorderColor = SKColor.greenColor()
let shapeFillColor = SKColor.yellowColor()
let shapeZPosition: CGFloat = 1.0
scene.backgroundColor = SKColor.grayColor()

createdShape.name = "whiteArea"
createdShape.strokeColor = shapeBorderColor
createdShape.lineWidth = 0.0
createdShape.fillColor = shapeFillColor
createdShape.alpha = 1.0
createdShape.zPosition = shapeZPosition
createdShape.glowWidth = 3.0

createdShape.position = CGPoint(x: 150, y: 150)

let graphicAddonShape = createdShape.copy() as! SKShapeNode
graphicAddonShape.setScale(0.7)
graphicAddonShape.lineWidth = 0
graphicAddonShape.zPosition = shapeZPosition + 1
graphicAddonShape.fillColor = UIColor(red:  15/255, green: 15/255, blue: 15/255, alpha: 1.0)
graphicAddonShape.name = "blackArea"

graphicAddonShape.position = CGPointZero // This will be in it's parent co-ordinate system
createdShape.addChild(graphicAddonShape)
scene.addChild(createdShape)

Чтобы увидеть вывод, вам нужно перейти в View->Assistant Editor->Show Assistane Editor.

Вы увидите, что я установил position графикаДобавить форму в CGPoint(0,0). position свойство SKShapeNode относится к его центру, поэтому мы помещаем центр graphicAddonShape в положении (0,0) в родительском (createdShape) система координат, т.е. createdShapeцентр. Чтобы увидеть разницу, измените 2-ую из последней строки с:

createdShape.addChild(graphicAddonShape) 

в

scene.addChild(graphicAddonShape)

чтобы увидеть, как черный круг расположен в зависимости от того, кто его родитель.

Другие вопросы по тегам