(该字体缺少繁体字形,所以第三行的繁体“乱数”无法显示)
(准确来说是个dll,我还没写成gex扩展)
Github存储库名GaseousMarble(放链接会吞帖)
众所周知gm8上有个名为foxwriting的中文绘制插件,但该插件由于调用了不支持gm8.1的gmapi库而只能在gm8上使用。幸运的是gm8.1提供了get_function_address函数,如果能够将它自己的函数指针传给dll那么就可以在dll中调用任意gm函数。我不熟悉win32api(foxwriting使用了gdi读取字符纹理)所以使用字体精灵的方案,也就是将所有字符纹理存成一张精灵图传入gm,字形信息存成二进制文件由dll读取,便能借助draw_sprite_general逐字符绘制达到绘制中文的效果。但是我使用的gm8.2(gm8.1的社区魔改版)在存储多字节字符时只会存储首字节,因此需要使用utf-16 base64编码对非ascii字符套上一层壳。
dll的使用方法详见external_define,external_call函数,提供了以下接口
gm_init(<get_function_address的函数指针>) 示例:external_call(global.gm_init,get_function_address('get_function_address'))
gm_draw(<x>,<y>,<utf-16 base64编码字符串>)
gm_font(<字体精灵路径>,<字体偏移数据>) 返回字体索引,存储库中提供了ttf2png python脚本由字体生成对应文件
gm_set_font(<字体索引>)
gm_set_color(<上颜色>,<下颜色>)
gm_set_alpha(<不透明度>)
gm_set_align(<水平对齐方案>,<垂直对齐方案>) 负为左,零为中,正为右
gm_set_letter_spacing(<字间距>)
gm_set_line_height(<行高>)
gm_set_offset(<基础水平偏移>,<基础垂直偏移>)