GameMaker Studio 2

创建于:2017-04-19

创建人: dougen

190 信息 1080 成员
游戏开发工具 GameMaker Studio 2 的讨论小组

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)

细节见仁见智地自己调整吧

(转发自:原日志地址

近期喜欢的会员

 
顺子 2017-10-06

戈麦斯好评~!

 
radio 2017-10-08

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;

 
张八万工作室 2019-07-31

radio 谢谢大神的脚本

 
kasade 2020-02-03

radio 牛逼!多谢啦!

 
cwj 2020-08-15

radio 非常感谢啊!很好用

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册