Project1

标题: 英文rpgmakermv游戏汉化怎么解决换行问题 [打印本页]

作者: 醋酸铅    时间: 2024-9-12 21:51
标题: 英文rpgmakermv游戏汉化怎么解决换行问题
本帖最后由 醋酸铅 于 2024-9-12 21:52 编辑

最近在汉化一个英文RPG,然后发现文本改成中文以后会溢出文本框,
上网找了可以换行中文字符的YEP_MessageCore以后,发现换行效果并不好,
具体不好的地方有:
1.把行尾过长的英语单词截断,一半放上一行,一半放下一行
2.行头标点符号顶格
如果不能自动换行,就要手动添加换行符号,实在太累,而且后期想换一下字体,使用换行符可能会导致数字溢出文本框(因为很多字体数字和字母的宽度都有区别)
目前希望的效果如图所示

想问一下各位是怎么解决这类问题的

1.jpg (87.79 KB, 下载次数: 1)

1.jpg

作者: 百里_飞柳    时间: 7 天前
同想知道,除了不断循环判定再动态调整位置外
插眼学习下,好更新到我的对话框里(x)
作者: utunnels    时间: 7 天前
只能吧YEP改改了,专门给中文写一套规则。
或者找个排版工具排完了再复制进去
作者: utunnels    时间: 7 天前
本帖最后由 utunnels 于 2024-9-13 16:12 编辑

比如做个插件放在YEP后面
  1. function isChineseWordBreak(textState){
  2.   return true;
  3. }

  4. function charMode(c){
  5.   var marks = '\uff0c\u3002\uff1a\u3001\uff1b\u00b7';
  6.   var newMode = {};
  7.   newMode.isM = marks.contains(c);
  8.   newMode.isC = (c.charCodeAt(0)>256 && !newMode.isM);
  9.   newMode.isE = c.charCodeAt(0)<256;
  10.   newMode.isS = /\s/.test(c);
  11.   return newMode;
  12. }

  13. function findNextSpace(textState){
  14.   var mode = {isNew:true};
  15.   for(var i=textState.index;i<textState.text.length;i++){
  16.     var newMode = charMode(textState.text[i]);
  17.     if(!mode.isNew){
  18.       if(newMode.isS) return i;
  19.       if(newMode.isC) return i;
  20.       if(newMode.isE && !mode.isE) return i;
  21.     }
  22.     mode = newMode;
  23.   }
  24.   return -1;
  25. }

  26. Window_Base.prototype.checkWordWrap = function(textState) {
  27.     if (!textState) return false;
  28.     if (!this._wordWrap) return false;
  29.     var size = 0;
  30.     if (isChineseWordBreak(textState)) {
  31.       var nextSpace = findNextSpace(textState);
  32.       var nextBreak = textState.text.indexOf('\n', textState.index + 1);
  33.       if (nextSpace < 0) nextSpace = textState.text.length + 1;
  34.       if (nextBreak > 0) nextSpace = Math.min(nextSpace, nextBreak);
  35.       var word = textState.text.substring(textState.index, nextSpace);
  36.       size = this.textWidthExCheck(word);console.log(word,size);
  37.     }
  38.     var ww = (size + textState.x > this.wordwrapWidth());
  39.     if(ww) textState.index--;
  40.     return ww;
  41. };
复制代码

作者: utunnels    时间: 7 天前
也可以试试这个版本,据说是根据文本框的换行规则来写的
https://forums.rpgmakerweb.com/i ... v3-0-is-out.139627/




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1