1

SpriteKit を使用して小さなゲームをプログラミングしています。最初のテキストが「0」の SKLabelNode を SKScene に追加しました。次を使用して、この SKLabel のテキストを更新しようとすると:

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

SKScene が呼び出されてから更新されるまでの間に、SKScene 全体の短い一時停止があります。ただし、これは最初に呼び出されたときにのみ発生するため、シーンの一時停止後にスコアラベルを更新するときにこれを 2 回実行すると、一時停止は発生しません。

メソッド呼び出しをトリガーしているのは... CC は、Int に型指定されたphysicsBody カテゴリBitMasks の列挙型です。

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 のテキストを変更することに固有のものだと思います

4

1 に答える 1

1

遅延の原因となる可能性のある 2 つのことを確認する必要があります。

  • フォント名のタイプミスについて

  • フォント ファミリ全体、つまり、Arial-BoldMT または Arial-ItalicMT だけでなく、Arial をロードしていないこと。特定のフォントを使用している場合、フォント ファミリ全体を読み込むと遅延が発生する可能性があるため、明確にする必要があります。iOS フォントのリストは、ここにあります。

利用可能なフォントを一覧表示する (そして実際のフォント名を表示する) 必要がある場合は、次のようなものを使用できます。

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

  println("\(familyName)")

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

}

ラベルを初めて初期化するとき (衝突が発生した瞬間など)、iOS で使用できないカスタム フォントを使用している場合、遅延が発生することがあります。

その場合、ラベルを使用する前にフォントを「プリロード」してみてください。したがって、実際のゲームプレイの前に、SKLabelNode をインスタンス化し、そのテキスト プロパティを何らかの値に設定する必要があります。テキスト プロパティを設定する必要があります。これにより、フォントがプリロードされ、使用できるようになります。それ以外の場合は、ラベルのテキスト プロパティを設定したときに読み込まれます。

編集:

申し訳ありませんが、あなたはすでに初期テキストでラベルを初期化していると言われていることに気付きました. したがって、それに関連する私の回答の一部を無視して、タイプミスと特定のフォントの読み込みに関する部分を探してください。

これがあなたをどこかに連れて行ってくれることを願っています。幸運を!

于 2015-05-25T00:57:29.963 に答える