从旋转的大炮射击球

时间:2017-10-27 15:28:55

标签: swift sprite-kit rotation skaction

我正在制作SpriteKit游戏。我有六门大炮,我已经旋转回来,第四次。我想从每门大炮射出炮弹,与每门大炮的旋转同步。我想在每个炮弹之间持续一秒钟。

基本上:持续旋转的大炮是在与旋转方向相同的方向射击炮弹。

对于我使用扩展程序的大炮:

extension CGFloat {
func degreesToRadians() -> CGFloat {
    return self * CGFloat.pi / 180
}
}

我要把代码放在一个大炮上,因为我应该能够弄清楚如何将其中一个炮弹动作调整到其他大炮。这是一个:

func createCannons() { 

  let cannonLeftBottom = SKSpriteNode(imageNamed: "Cannon")

  cannonLeftBottom.anchorPoint = CGPoint(x: 0.5, y: 0.5)
  cannonLeftBottom.position = CGPoint(x: -325, y: -420)
  cannonLeftBottom.zPosition = 4
  cannonLeftBottom.setScale(0.4)
  cannonLeftBottom.zRotation = CGFloat(65).degreesToRadians()

  let rotateLB = SKAction.rotate(byAngle: 
  CGFloat(-65).degreesToRadians(), duration: 2)

  let rotateBackLB = SKAction.rotate(byAngle: 
  CGFloat(65).degreesToRadians(), duration: 2)

  let repeatRotationLB = 
  SKAction.repeatForever(SKAction.sequence([rotateLB,rotateBackLB]))

  cannonLeftBottom.run(repeatRotationLB)

  self.addChild(cannonLeftBottom)

}

这是我的炮弹功能:

func createBalls() {

  let cannonBallLB = SKSpriteNode(imageNamed: "Ball")

  cannonBallLB.name = "CannonBall"
  cannonBallLB.position = CGPoint(x: -325, y: -420)
  cannonBallLB.physicsBody = SKPhysicsBody(circleOfRadius: 
  cannonBallLB.size.height / 2)
  cannonBallLB.physicsBody?.affectedByGravity = false
  cannonBallLB.zPosition = 3
  cannonBallLB.setScale(0.1)
  self.addChild(cannonBallLB)

}

THX!

1 个答案:

答案 0 :(得分:1)

您需要从极坐标转换为直角坐标。

您可以使用sin和cos

来完成此操作

E.G。

let speed = 100 //This would mean move 100 points per second
let force = CGVector(dx:cos(cannon.zRotation) * speed,dy:sin(cannon.zRotation) * speed)
cannonBall.applyForce(force)

注意:现在除非他们改变了这个,强制过去以点为单位,如果他们把它固定为米的单位,那么你需要将你的速度除以150,因为150点= 1米的Spritekit