GMS2 中文换行
骨折好少女
2017-10-05
首先是目的
- 很简单就是老子想要中文换行
然后就是谈谈烦心的事情
我工程通常或多或少的会考虑外置文档 这个时候
- 外置的内容无论是 中文还是英文 反正只要是外置就没法使用 的gms2新功能 “\x” 系列(在str中加入 可以达到 tab 换行等效果)
- 新功能无法使用 但是戈麦斯2 还是留了个接口 string_hash_to_newline (文本中加入#字换行)
- draw_text_ext 写在能让一行字就这样宽 其他文本的内容往下挤 但是啊 但是啊 这玩意是给英文的 也就是 以空格等字符为分界线啊 别的不说 就讲空格 往外置文本中文里面打 除非你像我这样打字一般不用标点符号
解决理念
拆开 往每一句话后面 加入个 “#”
代码
str = "这是一段中文。这是一段中文。这是一段中文。这是一段" var L = string_length(str) L = L div 7 //一行7个字就这样打算了(真挤) 整出一下长度看一下需要分配几行字 //第一行字 i = 0 T[i] = string_copy(str,1+i*7,7) + "#" //中间 for (i=1; i<L; i+=1) { T[i] = string_copy(str,1+i*7,7) + "#" }; //收尾 T[i] = string_copy(str,1+i*7,7) //把他们都合并起来 var A = i+1 var str2 = "" for (i=0; i<A+1; i+=1) { str2 +=T[i] }; //转个码再赛回去 str = string_hash_to_newline(str2)
细节见仁见智地自己调整吧
(转发自:原日志地址)
GMS更新以后也碰到了换行问题,导致之前的游戏无法正常显示中文,最后自己写了个SCRIPT。凑合用吧。
用下面这个替换draw_text_ext
///draw_txt_warp(x,y,txt,sep,w); var xx, yy, vtxt, vsep, vww, vth, vhh; vth = 0; xx = argument0; yy = argument1; vtxt = argument2; vsep = argument3; vww = argument4; vhh = string_height(vtxt); vlen = string_length(vtxt); var i = 1; var j = 1; repeat vlen{ var vcut = string_copy(vtxt, 1, j); if i == vlen { draw_text(xx, yy + vth, vtxt); vth += vsep; } else if string_count("#",vcut) > 0 { vcut = string_replace(vcut, "#", ""); draw_text(xx, yy + vth, vcut); vtxt = string_delete(vtxt, 1, j); vth += vsep; j = 0; } else if string_width(vcut) > vww { var vj = max(1, j-1); vcut = string_copy(vtxt, 1, vj); draw_text(xx, yy + vth, vcut); vtxt = string_delete(vtxt, 1, vj); vth += vsep; j=0; } i += 1; j += 1; } return vth;
戈麦斯好评~!