Cat_Anchor 发表于 2023-2-26 10:16:12

附加包教程:21.字体

本帖最后由 Cat_Anchor 于 2023-2-27 18:55 编辑

注:本期内容选学。



前言



上期,我们学习了声音。现在,我们来学习字体这个冷门的内容。



https://klpbbs.com/static/image/hrline/line5.png


字体



打开资源包根目录,打开font文件夹,这里用于存放字体相关的文件。打开原版的font文件夹,里面会有很多以“glyph_”开头的图片,这个用于存放文字在游戏内的显示方式。glyph_后面有两个字符,那些是十六进制,从00排到FF。当然,并不是一定要有不常见的字符,例如原版font文件夹里就没有glyph_E5.png。
每一张glyph_图片都被均匀地分成256等份,横向平均分16格子,竖向再平均分16格子。例如,大部分glyph_图片的分辨率是256*256,那么一个字符的分辨率大小就是16*16。特殊地,glyph_E0.png的分辨率是512*512。这时,每个字符就占用32*32的分辨率大小。也就是说,glyph_图片是可以等比例缩放的。
除了glyph_XX.png,还有minecraft-ten.ttf,这是一个字体文件,记录了MinecraftTen字体。使用MT管理器打开可以方便地查看这个字体,注意示例中的英文字母。
还有notfound.png这张图片,记录了一堆问号,应该是游戏找不到该显示的字符时就会显示这张图片。
还有smooth文件夹,里面有些奇怪的文件,目前还不清楚它们的作用(似乎是一个字体),所以我们看看剩下的两个文件。
在font文件夹下还有两个文件,一个是emoticons.json,一个是font_metadata.json。前面一个还算明朗,后面一个简直让人不知道是做什么的。
以下是emoticons.json可能的代码格式。

[
    {
      "name": "shank", //表情的ID。在语言文件里用“:表情ID:”,例如“:shank:”,可以直接调用表情。调用的字符的码位在下面指定。(不确定)
      "code": "0xE100" //码位。使用十六进制。这里的0xE100相当于\uE100。
    },
    {
      "name": "armor", //这里与上面相同。
      "code": "0xE101" //这里与上面相同。
    },
    {
      "name": "minecoin", //这里与上面相同。
      "code": "0xE102" //这里与上面相同。
    }
]

还有一个font_metadata.json,似乎是字体元信息。这个文件更让人不明所以。以下内容纯粹是根据键名推断出来的,比较不可信。

{
    "version" : 1, //版本
    "fonts" : [ //字体
      {
      "font_format": "ttf", //字体格式。
      "font_name": "MinecraftTen", //字体名称,应该是用于UI的。
      "version": 1, //版本
      "font_file": "font/minecraft-ten", //字体文件的位置。
      "lowPerformanceCompatible": false //低性能兼容
      },
      {
      "font_format" : "msdf", //一种未知的字体格式
      "font_name" : "OldSmoothFont", //字体名称,应该是用于UI的。
      "font_file" : "font/smooth/smooth_" //从这里可以推断出那个smooth文件夹下的一堆奇怪的文件代表了一个字体。
      }
    ],
    "font_aliases" : [ //这一部分更加不明所以了,这里应该是字体别名。
      { //一个字体和它对应的别名。
      "alias" : "SmoothFontLatin",//别名

      "fonts" : [ //字体
          {
            "font_reference" : "OldSmoothFont" //字体参考
          },
          {
            "font_reference" : "UnicodeFont", //字体参考
            "font_ranges" : [ //字体范围,可能是码位的范围
            { "first" : 54620, "last" : 54620 },
            { "first" : 44397, "last" : 44397 },
            { "first" : 50612, "last" : 50612 },
            { "first" : 45824, "last" : 45824 },
            { "first" : 48124, "last" : 48124 },
            { "first" : 57344, "last" : 63743 }
            ]
          }
      ]
      },
      {
      "alias": "MinecraftTenEmoticon", //别名
      "fonts": [ //字体
          {
            "font_reference": "MinecraftTen" //字体参考
          },
          {
            "font_reference": "unicode", //字体参考
            "font_ranges": [ //字体范围,可能是码位的范围
            {
                "first": 57344,
                "last": 63743
            }
            ]
          }
      ]
      },
      { //这一堆东西和上面的格式一样。
      "alias": "SmoothSmall",
      "font_scale_factor": 1,
      "fonts": [
          {
            "font_reference": "OldSmoothFont"
          },
          {
            "font_reference": "UnicodeFont",
            "font_ranges" : [
            { "first" : 54620, "last" : 54620 },
            { "first" : 44397, "last" : 44397 },
            { "first" : 50612, "last" : 50612 },
            { "first" : 45824, "last" : 45824 },
            { "first" : 48124, "last" : 48124 },
            { "first" : 57344, "last" : 63743 }
            ]
          }
      ]
      }
    ]
}

嗯,说实话,很少有资源包会用这个font文件夹,因为如你所见,对于它的研究实在太少了,而且它本身也不支持什么很高级的操作,顶多就是用空码位输入图片罢了。



https://klpbbs.com/static/image/hrline/line1.png


总结



这一期,我们学完了字体。下一期,我们就要讲行为树了。





第二十期 第二十一期 第二十二期
页: [1]
查看完整版本: 附加包教程:21.字体