swift - 如何防止孩子与父母发生转变
问题描述
我正在创建一个从枪管中射出子弹的功能。我将子弹保留为枪的孩子,以便无论玩家面向何处,都能将其放置在正确的位置。但是,如果我在玩家移动时射击,子弹会相对于玩家移动。子弹产生后如何删除相对参考。
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)
}
解决方案
从苹果...
将此节点坐标系中的一个点转换为节点树中另一个节点的坐标系。宣言
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)
推荐阅读
- javascript - 使用 JavaScript 按钮前进
- php - 我正在使用 docker 建立一个 apache 和 php 服务器,我可以进入并查看它,但我网络中的其他人无法访问
- javascript - 如何通过使用 javascript 在外部单击来隐藏下拉菜单
- javascript - vue-socket.io Uncaught TypeError:无法读取未定义的属性
- jmeter - org.apache.http.conn.HttpHostConnectException 与 jMeter
- css - 在 flex-direction 中控制 flex 子项的高度:行场景
- java - 货号格式异常
- angular - 我可以使用 SVG
- python - 如何在python中捕获文本并同时替换它?
- mfc - ARGB 未在默认 MFC 项目中定义