我正在使用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的文本
答案 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属性设置为某个值。您必须设置文本属性,因为通过这样做,字体将被预加载并准备好使用。否则,它将在您设置标签的文本属性时加载。
编辑:
抱歉,我刚刚注意到您说您已经初始化了一个带有初始文本的标签。因此,我只是忽略了与此相关的部分,并查找拼写错误以及有关加载特定字体的部分。
希望这会带你去某个地方。祝你好运!