Добавить SKShapeNode в другой

Я хочу нарисовать квадрат в другой квадрат; но я не могу правильно расположить второй. Что я могу сделать для позиционирования на основе координат первого квадрата?

    var tileBackground = SKShapeNode(rectOfSize: CGSize(width: screenWidth, height: screenWidth))
    tileBackground.name = "tileBackground"
    tileBackground.fillColor = SKColor.whiteColor()
    tileBackground.position = CGPoint(x: frame.midX, y: frame.midY);
    self.addChild(tileBackground)

    var tile = SKShapeNode(rectOfSize: CGSize(width: tileSize, height: tileSize))
    tile.name = "tile1"
    tile.fillColor = SKColor.redColor()
    tile.position = CGPointMake(100,100)
    tileBackground.addChild(tile)

2 ответа

Решение

Вы должны использовать вместо этого SKSpriteNode. Таким образом, вы можете добавить его легко и без установки позиции вручную. Потому что в SKSpriteNode центр всегда является центром узла:

var tileBackground = SKSpriteNode(color: UIColor.whiteColor(), size: CGSizeMake(width: screenWidth, height: screenWidth))
tileBackground.name = "tileBackground"
tileBackground.position = CGPoint(x: frame.midX, y: frame.midY);
self.addChild(tileBackground)


var tile = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: tileSize, height: tileSize))
tile.name = "tile1"
tileBackground.addChild(tile)

Позиция узла относительно его родительской позиции. Если вы хотите, чтобы узел плитки находился в центре его родителя, установите его положение следующим образом:

tile.position = CGPoint(x: tileBackground.size.width / 2.0, y: tileBackground.size.height / 2.0)

который поместит плитку в центр tileBackground узел. также обратите внимание, что вам не нужно обновлять позицию плитки, чтобы "следовать" tileBackground узел. Обновление tileBackground позиция будет автоматически держать плитку в ее центре

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