【问题标题】:Increment score in Sprite Kit to show in HUDSprite Kit 中的增量分数以显示在 HUD 中
【发布时间】:2015-12-22 12:13:48
【问题描述】:

我知道我已经接近让我的游戏得分增加了。

当我明确更改代码以添加一个整数(例如 5)而不是“%d”时,触摸硬币时分数会显示在 HUD 中:

func didBeginContact(contact: SKPhysicsContact) {
    lblScore.text = String(format: "%d", GameState.sharedInstance.score)
} 

到:

func didBeginContact(contact: SKPhysicsContact) {
    lblScore.text = String(format: "5", GameState.sharedInstance.score)
}

但是,如果我离开“%d”,则什么也不会发生。我不确定如何增加 HUD 中的分数或在哪里进行更改。

这是其余的代码。

GameScene.swift:

struct PhysicsCategory {

  static let None: UInt32              = 0
  static let Player: UInt32            = 0b1     
  static let CoinNormal: UInt32        = 0b1000  
  static let CoinSpecial: UInt32       = 0b10000  
}

class GameScene: SKScene, SKPhysicsContactDelegate {

 // HUD 
 var hudNode: SKNode!
 var lblScore: SKLabelNode!
 var lblCoins: SKLabelNode!

 override func didMoveToView(view: SKView) {

   // HUD
   hudNode = SKNode()
   hudNode.zPosition = 1000
   cameraNode.addChild(hudNode)


   // Coins
   // 1
   let coin = SKSpriteNode(imageNamed: "powerup05_1")
   coin.position = convertPoint(CGPoint(x: 300, y: self.size.height-100), toNode: cameraNode)
   coin.zPosition = 1000
   hudNode.addChild(coin)

   // 2
   lblCoins = SKLabelNode(fontNamed: "ChalkboardSE-Bold")
   lblCoins.fontSize = 70
   lblCoins.fontColor = SKColor.whiteColor()
   lblCoins.position = convertPoint(CGPoint(x: 375, y: self.size.height-100), toNode: cameraNode)
   lblCoins.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left
   lblCoins.zPosition = 1000

   // 3
   lblCoins.text = String(format: "X %d", GameState.sharedInstance.coins)
   hudNode.addChild(lblCoins)

   // Score
   // 4
   lblScore = SKLabelNode(fontNamed: "ChalkboardSE-Bold")
   lblScore.fontSize = 70
   lblScore.fontColor = SKColor.whiteColor()
   lblScore.position = convertPoint(CGPoint(x: self.size.width-325, y: self.size.height-100), toNode: cameraNode)
   lblScore.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Right
   lblScore.zPosition = 1000

   // 5
   lblScore.text = "0"
   hudNode.addChild(lblScore)
  }
}

func didBeginContact(contact: SKPhysicsContact) {

  lblScore.text = String(format: "%d", GameState.sharedInstance.score)
}

GameState.swift:

class GameState {
  var score: Int
  var highScore: Int
  var coins: Int

  init() {
    // Init
    score = 0
    highScore = 0
    coins = 0

    // Load game state
    let defaults = NSUserDefaults.standardUserDefaults()

    highScore = defaults.integerForKey("highScore")
    coins = defaults.integerForKey("coins")
  }

  func saveState() {
    // Update highScore if the current score is greater
    highScore = max(score, highScore)

    score = max(score, highScore)

    // Store in user defaults
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setInteger(highScore, forKey: "highScore")
    defaults.setInteger(coins, forKey: "coins")
    NSUserDefaults.standardUserDefaults().synchronize()
  }

  class var sharedInstance: GameState {
    struct Singleton {
        static let instance = GameState()
    }

    return Singleton.instance
  }
}

【问题讨论】:

  • @James Zaghini 感谢您修复格式。我一定错过了。

标签: ios swift sprite-kit


【解决方案1】:

我可以看到您正在使用GameState.sharedInstance.score 来存储分数。但你永远不会更新它。每次玩家得分时,您都必须增加得分。这部分:

 lblScore.text = String(format: "%d", GameState.sharedInstance.score)

仅从分数变量中读取。

这部分也没有意义:

highScore = max(score, highScore)

score = max(score, highScore)  //remove this

score 变量与 highscore 变量不同。

【讨论】:

  • 那么,如何增加分数?我假设它在func didBeginContact(contact: SKPhysicsContact) 方法中?我该怎么写?谢谢
  • @Paul 像任何其他变量 GameState.sharedInstance.score 一样! += 1(或您想要的任何点数)。何时增加分数取决于您的游戏逻辑。
  • 就是这样!我知道我需要递增,但不知道如何用 Swift 编写它。现在我需要弄清楚如何为特殊硬币添加不同的点。将该答案添加到您的官方答案中,我会奖励您。
  • @Paul 我相信他回答了你的问题。如果您有其他问题,您应该创建一个新问题。
  • @SkylerLauren 是的!但答案在 cmets 中。他只需要将GameState.sharedInstance.score += 1移到官方解答区即可。我还没有新问题。
【解决方案2】:

我可以通过这一行来增加分数:

GameState.sharedInstance.score += 1

或者将 1 替换为您想要增加的点数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多