SKScene 短暂暂停当 SKLabelNode 的文本更改时

SKScene Pausing briefly When SKLabelNode's text is changed

我正在使用 SpriteKit 编写一个小游戏 我将 SKLabelNode 添加到我的 SKScene 中,初始文本仅为“0”。 当我尝试使用以下方式更新此 SKLabel 的文本时:

func updateScoreLabel() {
        scoreNumber++
        scoreLabel.text = String(scoreNumber)
    }

整个 SKScene 在调用和更新之间有短暂的停顿。 然而,这只会在第一次被调用时发生,所以如果我是 运行 这是第二次更新 scoreLabel 任何后续场景暂停,那么暂停不会发生。

触发方法调用的是...CC 是类型为 Int 的 physicsBody categoryBitMasks 的枚举

func isCollisionBetween(nodeTypeOne: CC, nodeTypeTwo: CC, contact: SKPhysicsContact) -> Bool {

    let isAnodeTypeOne = contact.nodeA.physicsBody!.categoryBitMask == nodeTypeOne.rawValue
    let isAnodeTypeTwo = contact.nodeA.physicsBody!.categoryBitMask == nodeTypeTwo.rawValue

    let isBnodeTypeOne = contact.nodeB.physicsBody!.categoryBitMask == nodeTypeOne.rawValue
    let isBnodeTypeTwo = contact.nodeB.physicsBody!.categoryBitMask == nodeTypeTwo.rawValue

    if (isAnodeTypeOne && isBnodeTypeTwo) || (isAnodeTypeTwo && isBnodeTypeOne) {
        return true
    } else {
        return false
    }

}

那么如果

    if isCollisionBetween(CC.TypeA, nodeTypeTwo: CC.TypeB, contact: contact) {

                updateScoreLabel()

}

谁能指出问题所在。当检测到相同的碰撞并且使用 println 语句输出分数时,分数更新不会暂停场景,所以我认为它特定于更改 SKLabelNode

的文本

您应该检查两件肯定会导致延迟的事情:

  • 字体名称 错别字

  • 您没有加载整个字体系列,即 Arial,而不仅仅是 Arial-BoldMT 或 Arial-ItalicMT。您想要具体一点,因为加载整个字体系列会在使用某些字体时造成延迟。可以找到 iOS 字体列表 here

如果你需要列出可用的字体(并查看真实的字体名称),你可以使用这样的东西:

for familyName in UIFont.familyNames() as [String] {

  println("\(familyName)")

  for fontName in UIFont.fontNamesForFamilyName(familyName) as [String] {
    println("\tFont: \(fontName)")
  }

}

第一次初始化标签时(比如在发生碰撞的那一刻)如果您使用自定义字体,则可能会发生延迟iOS ].

在这种情况下,请在使用标签之前尝试 "preload" 一种字体。所以在实际游戏之前,您应该实例化 SKLabelNode 并将其文本 属性 设置为某个值。您必须设置一个文本 属性,因为这样字体将被预加载并准备好使用。否则它将在您设置标签文本时加载 属性.

编辑:

抱歉,我刚刚注意到您说您正在初始化一个带有初始文本的标签。因此,请忽略我的回答中与此相关的部分,并查找拼写错误和有关加载特定字体的部分。

希望这会带你到某个地方。祝你好运!