SKScene短暂暂停当SKLabelNode的文本发生变化时

时间:2015-05-24 17:49:03

标签: swift text sprite-kit sklabelnode

我正在使用SpriteKit编写一个小游戏 我在我的SKScene中添加了一个SKLabelNode,初始文本只是“0”。 当我尝试使用以下内容更新此SKLabel的文本时

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

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

触发方法调用的是... CC是一个物理枚举类型的BitBitMasks类型为Int

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的文本

1 个答案:

答案 0 :(得分:1)

你应该检查两件肯定会导致滞后的事情:

  • 错别字的字体名称

  • 您不是加载整个字体系列,即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中没有的自定义字体,可能会发生延迟。

在这种情况下,尝试在使用标签之前“预加载”字体。因此,在实际游戏玩法之前,您应该实例化SKLabelNode并将其text属性设置为某个值。您必须设置文本属性,因为通过这样做,字体将被预加载并准备好使用。否则,它将在您设置标签的文本属性时加载。

编辑:

抱歉,我刚刚注意到您说您已经初始化了一个带有初始文本的标签。因此,我只是忽略了与此相关的部分,并查找拼写错误以及有关加载特定字体的部分。

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