gamemaker吧 关注:13,609贴子:94,798
  • 16回复贴,共1

GameMaker 8.1 中文绘制dll

只看楼主收藏回复


(该字体缺少繁体字形,所以第三行的繁体“乱数”无法显示)
(准确来说是个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(<基础水平偏移>,<基础垂直偏移>)


IP属地:湖南1楼2024-06-11 22:39回复
    不错哦


    IP属地:广东2楼2024-06-12 08:57
    回复
      添加了以下接口
      gm_set_utf16_base64(<是否使用utf-16 base64编码>)
      gm_set_max_line_width(<最大行宽>) 超过会自动换行
      gm_set_word_spacing(<词间距>)
      gm_set_scale(<水平缩放倍率>,<垂直缩放倍率>)


      IP属地:湖南3楼2024-06-13 00:54
      收起回复
        dll下载链接


        IP属地:湖南5楼2024-06-13 20:44
        回复
          添加了以下接口
          gm_free(<字体id>)
          gm_get_xxx() xxx为要获取的绘制信息,例如gm_get_halign


          IP属地:湖南6楼2024-06-18 23:10
          回复
            统一使用UTF-8编码


            IP属地:湖南7楼2024-07-01 18:14
            收起回复

              ttf2png脚本支持描边了


              IP属地:湖南8楼2024-07-03 01:50
              收起回复
                v0.5.0
                将gm_set_color,gm_set_align拆分成了多个函数;改进了python脚本,使生成的png呈正方形,尽可能避免太长或太高导致绘制异常


                IP属地:湖南10楼2024-08-07 04:40
                回复
                  v0.6.0
                  添加gm_clear,在game_restart前调用避免内存泄漏;脚本支持替补字体,添加可选的抗锯齿选项。


                  IP属地:湖南11楼2024-08-10 23:12
                  回复


                    IP属地:湖南12楼2024-08-10 23:14
                    回复
                      v0.7.0
                      打包成扩展,移除gm_init(不需要了)


                      IP属地:湖南13楼2024-08-11 23:14
                      回复
                        v0.8.0
                        字体生成脚本添加outlined选项(空心字体)、指定字符列表后如果存在字体中没有的字符会报错


                        IP属地:湖南14楼2024-08-19 23:11
                        回复