我有这个代码,它对子弹节点施加力并让它向敌人移动。这种情况下火箭总是朝上。 我的问题是如何旋转这个子弹面向节点所在的方向。
let asd=SKSpriteNode(imageNamed: "nuke")
asd.zPosition=3
asd.setScale(0.1)
asd.position=CGPoint(x: self.size.width*0.945, y: self.size.height*0.48)
asd.physicsBody=SKPhysicsBody(rectangleOf: asd.size)
asd.physicsBody?.affectedByGravity=true
asd.physicsBody?.isDynamic=true
self.addChild(asd)
let scale=SKAction.scale(to: 0.4, duration: 0.5)
asd.physicsBody?.applyForce(CGVector(dx: -63, dy: 130))
let wait=SKAction.wait(forDuration: 10)
let rem=SKAction.removeFromParent()
let seq=SKAction.sequence([scale,wait,rem])
asd.run(seq)
}
答案 0 :(得分:1)
旋转是zRotation属性。
self.zRotation = <angle>
你必须首先找出用一些基本触发器设置它的角度。
角度以弧度指定并逆时针旋转,因此......
bullet 12 o'clock = 0
bullet 9 o'clock = pi/2
bullet 6 o'clock = pi
bullet 3 o'clock = pi * 3 / 2
答案 1 :(得分:0)
获取力度属性(速度向量)并从中计算角度,然后将此角度与zRotation属性相关联。类似的东西:
func didSimulatePhysics() {
if let pb = bullet.physicsBody {
bullet.zRotation = atan2(pb.velocity.dy, pb.velocity.dx)
}
提供的子弹指的是行动中的子弹......
注意:我使用didSimulatePhysics
来确保所有物理计算都已完成,因此速度矢量是正确的。