我在做一个精灵游戏。我有六门大炮,我已经把它们转回来,第四门。我想从每门炮上发射与每门炮旋转同步的炮弹。我想在每个炮弹之间保持一秒钟。
所以基本上:一门持续旋转的大炮是朝着与旋转方向相同的方向发射炮弹。
对于大炮我用的是分机:

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)

}

谢谢!

最佳答案

你需要把极坐标转换成直角坐标。
你用sin和cos
例如。

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米

关于swift - 从旋转的大炮射击球,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46978582/

10-12 06:04