将自定义“数字”图像添加到SKLabelNode中,作为使用Swift的SpriteKit分数

我基本上想要在单曲中添加自定义字体编号(与图像),并添加他们为我的比赛与SpriteKit我的比分。

这是字体图像风格

9号

他们是从0到9的数字

我一直在试图弄清楚这一点。

我不确定是否可以将它添加到SKLabelNode中,或者是否需要在课堂上完成。

SKLabelNode不允许使用位图字体。 如果您的自定义字体是TTF,则可以使用SKLabelNode的自定义字体。 这里解释如何: SKlabelNode自定义字体

在你的情况,因为你想使用位图字体,你将需要创build一个类来做到这一点。 您可以SKNode或不。 但是,你会希望有一个SKNode作为“根”,然后让你的号码的每个数字是一个SKSpriteNode (这些将是代表该数字的根节点的子节点)。

你要确定的一件事就是你想如何处理数字的alignment(水平和垂直)。

我已经使用自己的自定义类来绘制数字,通常可以configuration为水平可调(左alignment,右alignment和居中)。 但是出于懒惰,我通常总是垂直居中。

这听起来很复杂,但很容易做到。 你只需要有

  • 为每个数字分配位图纹理图谱的方法。 如果你有他们在0-9的进展更容易。
  • 设置/获取数字值的方法
  • 可以将数字转换成个人数字的方法。 你需要这个来计算哪个数字映射到哪个字符。
  • 计算数字宽度的方法。 如果你的字体是等宽的,那么这很容易。 如果不是,那么你需要根据数字宽度和字母间距来计算宽度。 对于等宽字体,您仍可能需要考虑字母间距。
  • 计算数字高度的方法。 这应该很容易,因为0-9应该都是相同的高度。
  • 删除现有SKSpriteNode并添加每个新数字的方法。 每一个新的数字根据alignment偏移适当的数量。

您的自定义类应该在设置数字值时构build正确的SKSpriteNode来表示数字。

关于如何使用SKTexture数组的最后一个问题的一些更新信息。 这段代码没有经过编译testing,只是给你一个更好的主意。

 // Example of storing digits in an array. Assumes you are putting this in an atlas and your // sub-texture names are 0, 1, etc. If not you'll have to adjust the code accordingly var numTextures = [SKTexture]() let numberAtlas = SKTextureAtlas(named: "NumberAtlas") for i in 0 ..< 10 { numTextures.append(numberAtlas.textureNamed("\(i)")) } // To get the texture for a digit func textureForDigit(digit:Int) -> SKTexture { return numTextures[digit] }