我有类AttackArea,Player和GameScene。 我想实例化一个新的AttackArea对象并将其放置在播放器附近,具体取决于玩家所面对的。现在我有正确定位的问题。如果我将AttackArea添加为GameScene的子节点,则定位将按预期工作。但是如果我这样做,AttackArea就不会随播放器移动。否则,如果我将AttackArea添加为播放器的子节点,它将随播放器一起移动。这正是我想要的。这里的问题是AttackArea的定位现在远离玩家。这是Player类中的代码:
func attack(){
let attack = AttackArea(color: .red, size: CGSize(width: self.frame.width, height: self.frame.height / 2))
var animation = ""
switch playerFacing{
case .back:
attack.position = CGPoint(x: self.position.x, y: self.position.y + 40)
animation = Constants.Actions.playerAttackBack
case .front:
attack.position = CGPoint(x: self.position.x, y: self.position.y - 40)
animation = Constants.Actions.playerAttackFront
case .left:
attack.position = CGPoint(x: self.position.x - 40, y: self.position.y)
animation = Constants.Actions.playerAttackLeft
case .right:
attack.position = CGPoint(x: self.position.x + 40, y: self.position.y)
animation = Constants.Actions.playerAttackRight
case .none:
break
}
attack.zPosition = self.zPosition + 1
attack.setup()
if animation != ""{
self.run(SKAction(named: animation)!)
}
self.addChild(attack)
}
第一张图显示了AttackArea是GameScene的孩子时的情况。定位很好,但我希望它是玩家的孩子。
第二张图显示了AttackArea是Player的孩子时的定位。右上角的红色方块是AttackArea,红色圆圈是Player。
在这种情况下,为什么AttackArea远离播放器?我怎样才能获得与第一张图片中相同的结果,唯一的例外是AttackArea是玩家的孩子?
答案 0 :(得分:1)
如果将定位更改为
会发生什么switch playerFacing{
case .back:
attack.position = CGPoint(x: 0, y: 0 + 40)
animation = Constants.Actions.playerAttackBack
case .front:
attack.position = CGPoint(x: 0, y: 0 - 40)
animation = Constants.Actions.playerAttackFront
case .left:
attack.position = CGPoint(x: 0 - 40, y: 0)
animation = Constants.Actions.playerAttackLeft
case .right:
attack.position = CGPoint(x: 0 + 40, y: 0)
animation = Constants.Actions.playerAttackRight
case .none:
break
}
我怀疑你的玩家(例如)可能位于500,500,并且你正在将这些值重新添加到攻击位置,所以现在它的位置是1000,1040