我基本上想在 Singles 中添加自定义字体编号(带有图像),并使用 SpriteKit 在我的游戏中添加它们作为我的分数。
这是字体图像样式
它们是从 0 到 9 的数字
一段时间以来我一直在试图解决这个问题。
我不确定您是否可以将其添加到 SKLabelNode 或者是否必须将其放入类中。
SKLabelNode
不允许使用位图字体。如果您的自定义字体是 TTF,您将能够使用自定义字体SKLabelNode
。这里有一个解释:SKlabelNode自定义字体 https://stackoverflow.com/questions/21368283/sklabelnode-custom-font
在您的情况下,由于您想使用位图字体,因此您需要创建一个类来执行此操作。您可以子类化SKNode
或不。但你会想要拥有一个SKNode
充当“根”,然后让您的号码的每个数字成为SKSpriteNode
(这些将是代表数字的根节点的子节点)。
您需要确定的一件事是如何处理数字对齐(水平和垂直)。
我之前使用过自己的自定义类来绘制数字,并且通常将其配置为可水平调整(左对齐、右对齐和居中)。但出于懒惰,我通常总是垂直居中。
这听起来可能很复杂,但很容易做到。你只需要有
- 为每个数字分配位图纹理图集的方法。更容易
如果它们按 0-9 的顺序排列。
- 设置/获取数值的方法
- 可以转换的方法
将数字分解为单独的数字。你需要这个来计算哪个
数字映射到哪个字符。
- 计算数字宽度的方法。如果
你的字体是等宽的,那么这很容易。如果不是,那么
您需要根据数字宽度和字母间距来计算宽度。对于等宽字体,您可能仍然需要考虑字母间距。
- 计算数字高度的方法。这应该很简单,就像 0-9 一样
高度相同。
- 删除已有的方法
SKSpriteNode
和
添加每个新数字。每个新数字都被适当的金额抵消
基于对齐。
您的自定义类应该根据设置的数值构建正确的SKSpriteNode
s 代表数字。
最后一个问题的一些更新信息涉及如何将数组与SKTexture
。该代码未经编译测试,旨在为您提供更好的想法。
// 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]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)