【问题标题】:Add custom "number" images to SKLabelNode in as a Score in SpriteKit with Swift使用 Swift 在 SpriteKit 中将自定义“数字”图像作为分数添加到 SKLabelNode
【发布时间】:2016-09-11 19:17:59
【问题描述】:

我基本上想在 Singles 中添加自定义字体编号(带图像),并在我使用 SpriteKit 的游戏中添加它们作为我的分数。

这是字体图片样式

它们是从0到9的数字

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

我不确定您是否可以将其添加到 SKLabelNode 中,或者您是否必须将其添加到类中。

【问题讨论】:

    标签: ios sprite-kit sklabelnode


    【解决方案1】:

    SKLabelNode 不允许使用位图字体。如果您的自定义字体是 TTF,您将能够使用带有 SKLabelNode 的自定义字体。这里有一个解释:SKlabelNode custom font

    在您的情况下,由于您想使用位图字体,因此您需要创建一个类来执行此操作。您可以将SKNode 子类化,也可以不子类化。但是您希望有一个 SKNode 作为“根”,然后让您的号码的每个数字都是一个 SKSpriteNode(这些将是代表该数字的根节点的子节点)。

    您需要确定的一件事是如何处理数字的对齐方式(水平和垂直)。

    我以前使用我自己的自定义类来绘制数字,并且通常将其配置为可水平调整(左对齐、右对齐和居中)。但出于懒惰,我通常总是垂直居中。

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

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

    您的自定义类应在设置数字值后构建正确的SKSpriteNodes 来表示数字。

    关于如何将数组与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]
    }
    

    【讨论】:

    • 感谢您的回答。我会尽快为您更新。
    • 好的,我为每个数字添加了纹理图集,但是添加了设置/获取数值或转换为单个数字的方法会给我带来错误(无法将 Int 转换为 SKTexture...)...跨度>
    • 当然不是。这就是数组的用途。创建一个SKTexture的数组,其中索引0代表0,索引1代表1,以此类推
    • 我认为一个简单的例子是最好的。出现了太多相互矛盾的错误。抱歉,我是 Swift 的新手。如果您没有时间这样做,我理解。谢谢。
    • 我添加了一个代码示例。将来,您至少应该提供您的代码尝试,以免让人觉得您只是想让其他人为您编写代码。特别是当您要求提供非常基本的东西的示例时。不管你是不是 swift 新手,这类问题已经以多种方式被问过无数次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多