如何旋转Spritenode,同时始终向前移动?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何旋转Spritenode,同时始终向前移动?相关的知识,希望对你有一定的参考价值。

我有这个代码,它对子弹节点施加力并使其向敌人移动。这种情况下火箭总是朝上。我的问题是如何旋转这个子弹面向节点所在的方向。

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

旋转是zRotation属性。

self.zRotation = <angle>

你必须首先找出角度来设置它与一些基本的trig。

角度以弧度指定并逆时针旋转,因此......

bullet 12 o'clock = 0
bullet  9 o'clock = pi/2
bullet  6 o'clock = pi
bullet  3 o'clock = pi * 3 / 2
另一答案

获取velocity属性(速度向量)并从中计算角度,然后将此角度与zRotation属性相关联。就像是:

func didSimulatePhysics() {
  if let pb = bullet.physicsBody {
    bullet.zRotation = atan2(pb.velocity.dy, pb.velocity.dx)
}

提供的子弹指的是行动中的子弹......

注意:我使用didSimulatePhysics来确保所有物理计算都已完成,因此速度矢量是正确的。

以上是关于如何旋转Spritenode,同时始终向前移动?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL模拟波斯王子相机

如何应用SPRITEKIT的CAMERA实现游戏中的ENDLESS无限循环背景

如何旋转/镜像 3d 动画?

Unity Player 向前移动到世界而不是本地

如何在SVG中旋转期间保持文本方向不变

gluLookAt() 的问题 - 旋转