Расположение 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)
чтобы увидеть, как черный круг расположен в зависимости от того, кто его родитель.