首页 > 解决方案 > 如何防止孩子与父母发生转变

问题描述

我正在创建一个从枪管中射出子弹的功能。我将子弹保留为枪的孩子,以便无论玩家面向何处,都能将其放置在正确的位置。但是,如果我在玩家移动时射击,子弹会相对于玩家移动。子弹产生后如何删除相对参考。

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)
}

标签: swiftxcodesprite-kit

解决方案


从苹果...

将此节点坐标系中的一个点转换为节点树中另一个节点的坐标系。宣言

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

参数

点 此节点坐标系中的一个点。

node 与此节点在同一节点树中的另一个节点。

返回 同一点转换到另一个节点的坐标系。

所以我会使用(假设 self 是场景)

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

编辑

如果您的对象是另一个对象的子对象,您可能必须使用 convert from 和 convert to 来获取绝对部分

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

推荐阅读