Итак, как выглядит ваш код, вы пытаетесь создать shapeNode, а затем поместить его в свой SKSpriteNode.В большинстве случаев вы правильно поняли, вы просто неправильно указали код позиционирования.
Когда вы добавляете дочерний узел к узлу, этот дочерний узел использует родительский узел в качестве исходной точки для ссылки.Поэтому, если вы укажете дочернему узлу -50 X и 150 Y, этот дочерний узел будет -50 X и 150 Y от центральной точки его родительского узла.
Когда я делаю дочерние узлы (особенно те, которые имеют тонну сходства с родительским узлом), мне нравится ссылаться на родительский узел для позиционирования, ширины и высоты.Я не знаю, может ли это быть плохой практикой, но это то, что я делал в течение двух лет.
Вот как бы я это сделал:
var sky = SKSpriteNode()
var ground = SKShapeNode()
func createSky()
{
sky = SKSpriteNode(color: SKColor.darkGray, size: CGSize(width: self.frame.size.wdith, height: self.frame.size.height))
// self.frame.size.width/self.frame.size.height calls its info from the ViewController, which is tied directly to your screen size (unless otherwise changed)
sky.position = CGPoint(x: 0,y: 0)
self.addChild(sky)
}
func createGround()
{
ground = SKShapeNode((rectOf: CGSize(width: sky.width, height: sky.height * 0.25))
ground.position = CGPoint(x: 0, y: sky.position.y - (ground.size.height / 1.5))
}