2016-03-03 20 views
0

我正在製作太空射擊遊戲,並且我希望這艘船能夠以它面對的方向發射子彈。我已經想出瞭如何讓子彈在船的方向上旋轉,但我沒有得到它在正確的方向射擊。目前,我只射擊。我有一個屏幕截圖下面。我怎樣才能解決這個問題?這裏是我的代碼:拍攝子彈的方向船舶正在面對迅捷和雪碧套件

if shootButton.containsPoint(location) { 

      let Bullet = SKSpriteNode(imageNamed: "BulletGalaga.png") 
      Bullet.zPosition = -5 

      Bullet.position = CGPointMake(ship.position.x, ship.position.y) 
      Bullet.zRotation = ship.zRotation 
      Bullet.zPosition = ship.zPosition 

      let action = SKAction.moveToY(self.size.height + 30, duration: 0.8) 
      //let action = SKAction.moveTo(self.ship.size.height, duration: 0.8) 
      let actionDone = SKAction.removeFromParent() 
      Bullet.runAction(SKAction.sequence([action, actionDone])) 

      Bullet.physicsBody = SKPhysicsBody(rectangleOfSize: Bullet.size) 
      Bullet.physicsBody?.affectedByGravity = false 
      Bullet.physicsBody?.dynamic = false 
      self.addChild(Bullet) 

     } 

謝謝。

Screenshot

+0

我我試圖用moveTo來替換let action = SKAction.moveToY(self.size.height + 30,duration:0.8),但它沒有起作用。我知道我不知何故需要它說子彈必須向船舶方向移動......我也知道moveToY必須改變。有任何想法嗎? @CleverError –

回答

0

您正在設置zPosition?你的意思是zRotation。這樣只會計算,子彈繪製的角度,你需要做一些三角函數來找出子彈會去在一條直線:

僞代碼:

let action = SKAction.moveTo(
       CGPointMake(
          travelDistance * cos(Bullet.zRotation) + Bullet.position.x, 
          travelDistance * sin(Bullet.zRotation) + Bullet.position.y 
       ), 
       duration: 0.8) 
+0

我得到錯誤「使用未解析的標識符tavelDistance」 –

+1

是的,你不能複製我的代碼verbatum,你需要弄清楚你想讓子彈走多遠 – Knight0fDragon

+0

整個事情都不起作用。有沒有辦法讓你重寫它?洛特的錯誤...你能解決嗎? –

-2
let action = SKAction.moveTo(
       CGPointMake(
        400 * -cos(Bullet.zRotation - 1.57079633) + Bullet.position.x, 
        400 * -sin(Bullet.zRotation - 1.57079633) + Bullet.position.y 
       ), 
       duration: 0.8) 
+2

M_PI_2如果你想1/2 PI – Knight0fDragon

+2

歡迎來到堆棧溢出!儘管這段代碼可以解決這個問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – SmokeDispenser