GameMaker 8.1 中文绘制dll
gamemaker吧
全部回复
仅看楼主
level 1
Mirion 楼主
(该字体缺少繁体字形,所以第三行的繁体“乱数”无法显示)
(准确来说是个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(<基础水平偏移>,<基础垂直偏移>)
2024年06月11日 14点06分 1
level 5
不错哦
2024年06月12日 00点06分 2
level 1
Mirion 楼主
添加了以下接口
gm_set_utf16_base64(<是否使用utf-16 base64编码>)
gm_set_max_line_width(<最大行宽>) 超过会自动换行
gm_set_word_spacing(<词间距>)
gm_set_scale(<水平缩放倍率>,<垂直缩放倍率>)
2024年06月12日 16点06分 3
[滑稽]这里的gm前缀其实是指库名GaseousMarble,也许我以后会用win32api重构,命名为LiquidMarble
2024年06月12日 16点06分
字体渐变不统一已经修复,在此过程中发现gm精灵图>=2^14的位置无法绘制,所以ttf2png脚本中以该数值为上限
2024年06月13日 12点06分
v0.1.0
2025年03月01日 05点03分
level 1
Mirion 楼主
dll下载链接
2024年06月13日 12点06分 5
level 1
Mirion 楼主
添加了以下接口
gm_free(<字体id>)
gm_get_xxx() xxx为要获取的绘制信息,例如gm_get_halign
2024年06月18日 15点06分 6
v0.2.0
2025年03月01日 05点03分
level 1
Mirion 楼主
统一使用UTF-8编码
2024年07月01日 10点07分 7
gm8.1对多字节字符串的存储应该没有问题,但它的字符串处理函数有缺陷,所以之前的utf16be base64方案是多余的[阴险]
2024年07月01日 10点07分
level 1
Mirion 楼主
ttf2png脚本支持描边了[阴险]
2024年07月02日 17点07分 8
v0.4.0
2024年08月10日 15点08分
level 1
Mirion 楼主
v0.5.0
将gm_set_color,gm_set_align拆分成了多个函数;改进了python脚本,使生成的png呈正方形,尽可能避免太长或太高导致绘制异常
2024年08月06日 20点08分 10
level 1
Mirion 楼主
v0.6.0
添加gm_clear,在game_restart前调用避免内存泄漏;脚本支持替补字体,添加可选的抗锯齿选项。
2024年08月10日 15点08分 11
level 1
Mirion 楼主
2024年08月10日 15点08分 12
level 1
Mirion 楼主
v0.7.0
打包成扩展,移除gm_init(不需要了)
2024年08月11日 15点08分 13
level 1
Mirion 楼主
v0.8.0
字体生成脚本添加outlined选项(空心字体)、指定字符列表后如果存在字体中没有的字符会报错
2024年08月19日 15点08分 14
level 1
Mirion 楼主
v0.9.0
添加gm_width和gm_height用于测量文本长宽
2024年12月30日 05点12分 15
level 1
Mirion 楼主
之后的更新日志会写在Github Release(英文),就不在两个平台都写一遍了
2025年03月01日 07点03分 16
1