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