2016-05-12 64 views
0

我試圖讓SKSpriteNode來自SKShapeNode。當下面的代碼運行時,投射出現,但它們將起源於屏幕上的不同點,而不是玩家位置。 這是我的播放器類中的拍攝功能。子彈不是來自正確的位置

func shoot() { 

      let newProjectile = Projectile() 
      newProjectile.position = self.position 

      self.addChild(newProjectile) 
      let action = SKAction.moveTo(CGPointMake(
       600 * -cos(newProjectile.zRotation - 1.57079633) + newProjectile.position.x, 
       600 * -sin(newProjectile.zRotation - 1.57079633) + newProjectile.position.y 
      ), duration: 2.0) 

      let actionMoveDone = SKAction.removeFromParent() 
      newProjectile.runAction(SKAction.sequence([action, actionMoveDone])) 
      } 

這裏是我的彈丸類:

class Projectile : SKSpriteNode { 

     let Texture = SKTexture(imageNamed: "image.png") 

     static var counter : Int = 0 

     init(){ 
      //super.init() 
      super.init(texture: Texture, color: UIColor.whiteColor(), size: CGSize(width: radius * 2, height: radius * 2)) 
      self.name = "projectile-" + NSUUID().UUIDString 
      self.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
      self.physicsBody?.categoryBitMask = GlobalConstants.Category.projectile 
      self.physicsBody?.collisionBitMask = GlobalConstants.Category.projectile 
      self.physicsBody?.contactTestBitMask = GlobalConstants.Category.projectile | GlobalConstants.Category.wall 
      self.zPosition = GlobalConstants.ZPosition.projectile 
} 
} 

回答

0

您可能需要您的彈丸添加到場景中,而不是球員本身。你正在向你的玩家添加投射物。

你應該添加射彈到父母的場景。像這樣的東西。

self.scene!.addChild(newProjectile) 
0

如果你想彈是球員的孩子,那麼彈丸的位置必須在播放器即的位置來表示(0,0)將放置在玩家的錨點彈丸。

如果你想讓投射物成爲場景的子女,那麼投射物的位置將以場景的形式表示,即需要一個等於玩家位置的位置才能將投射物置於玩家之上。

您將兩者結合起來,使得投擲物在場景中與玩家的(x,y)位置相關,但與玩家相關,這意味着無論玩家與場景的原點進行比較,這就是彈丸相對於玩家的位置。

+0

謝謝!其實你的答案都有幫助。我只需要做的是:self.addChild(newProjectile),我把self.addChild(self.newProjectile) –