Как удержать ребенка от трансформации с родителем - PullRequest
2 голосов
/ 24 апреля 2020

Я создаю функцию для выстрела пули из ствола оружия. Я держу пулю как дитя пистолета, чтобы она находилась в правильном положении независимо от того, где находится игрок. Однако, если я стреляю, когда игрок движется, пуля будет двигаться относительно игрока. Как я могу удалить относительную ссылку, когда пуля нерестилась.

func creatBullet() {

    let bullet = SKSpriteNode(imageNamed: "bullet")
    bullet.zPosition = 4
    bullet.position = CGPoint(x: gun.position.x-1, y: gun.position.y-20)

    //add physics
    gun.addChild(bullet)

    let xDirection = CGFloat(bullet.position.x)
    let yDirection = CGFloat(bullet.position.y + 150)

    let bulletMove = SKAction.moveBy(x: xDirection, y: yDirection, duration: 2)
    let sequence = SKAction.sequence([bulletMove, SKAction.removeFromParent()])
    bullet.run(sequence)
}

1 Ответ

0 голосов
/ 24 апреля 2020

от Apple ...

Преобразует точку в системе координат этого узла в систему координат другого узла в дереве узлов. Объявление

func convert(_ point: CGPoint, to node: SKNode) -> CGPoint

Параметры

точка Точка в системе координат этого узла.

узел Другой узел в том же дереве узлов, что и этот узел.

Возвращает ту же точку, преобразованную в систему координат другого узла.

, поэтому я бы просто использовал (предполагая, что self - сцена)

let pos = convert(gun.position, to self)
bullet.position = pos
addChild(bullet)

EDIT

если ваш объект является дочерним по отношению к другому объекту, вам, возможно, придется использовать convert from и convert to, чтобы получить абсолютную часть

pos = convert(convert(gun.position, from: gun.parent!), to: self)
...