読者です 読者をやめる 読者になる 読者になる

SKLabelNode で画面中央に時計を表示すると、何秒かおきに横にずれてしまうのを解消。

SKLabelNode で画面中央に時計を表示した時のこと。時計は、シンプルに次のような形で HH:MM:SS。これ、何秒かおきに微妙右にずれ、左にずれを繰り返します。理由は、画面左右の中央に時計を表示しますが、時計の数字フォントの幅が、数によって微妙に異なるため。例えば、1 の横幅と 0 の横幅は違うということ。

これ、TeX の時も謎だったんだよなぁ。TeX で表組みする時、表に数字データが入っていると、数字によって幅が異なるので、縦に並べようとするとガタガタになっちゃう。回避策は、数字を表示したいときは数式モードにしてやると、0-9 まで全部の width が揃う(というか、kernning されなくなる)ので、表組みしてもガタガタしない。

SKLabelNode の場合、kernning を解除する指定は無いようなので、さてどうしたものかと試行錯誤した結果、horizonalAlignmentMode というプロパティがあり、縦方向に揃えようとする時、どこで揃えるかを指定できることが判明。今回の場合、SKLabelHorizonalAlignmentModeLeft を指定して、label の左端を揃える位置として指定してやることで、ずれなくなりました。デフォルトは center になっているので、数字の組み合わせによって時計全体の幅が変わるのでガタガタしていた、という訳だ。

細かく指定できていいけど、ちょっとめんどくさいね。