我正在创建一个从枪管中发射子弹的功能。我将子弹留为枪支的孩子,以便将其放置在正确的位置,而不管玩家面对的是什么。但是,如果我在玩家移动时射击,子弹就会相对于玩家移动。子弹生成后如何删除相对引用。
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)
}
答案 0 :(得分:0)
来自Apple ...
将此节点的坐标系中的点转换为坐标 节点树中另一个节点的系统。声明
func convert(_ point: CGPoint, to node: SKNode) -> CGPoint
参数
point此节点坐标系中的一个点。
node与该节点在同一节点树中的另一个节点。
返回相同点转换为另一个节点的坐标 系统。
所以我只用(假设自我是场景)
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)