设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 260|回复: 4
打印 上一主题 下一主题

[有事请教] 英文rpgmakermv游戏汉化怎么解决换行问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
25
在线时间
5 小时
注册时间
2024-9-11
帖子
1
跳转到指定楼层
1
发表于 2024-9-12 21:51:50 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 醋酸铅 于 2024-9-12 21:52 编辑

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

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

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

1.jpg

Lv3.寻梦者

梦石
0
星屑
969
在线时间
130 小时
注册时间
2024-5-22
帖子
87
5
发表于 2024-9-13 16:34:33 | 只看该作者
也可以试试这个版本,据说是根据文本框的换行规则来写的
https://forums.rpgmakerweb.com/i ... v3-0-is-out.139627/
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
969
在线时间
130 小时
注册时间
2024-5-22
帖子
87
4
发表于 2024-9-13 16:04:54 | 只看该作者
本帖最后由 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. };
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
969
在线时间
130 小时
注册时间
2024-5-22
帖子
87
3
发表于 2024-9-13 16:00:11 | 只看该作者
只能吧YEP改改了,专门给中文写一套规则。
或者找个排版工具排完了再复制进去
回复 支持 反对

使用道具 举报

Lv6.析梦学徒

老鹰

梦石
40
星屑
34745
在线时间
6741 小时
注册时间
2012-5-26
帖子
3259

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 2024-9-13 12:16:50 | 只看该作者
同想知道,除了不断循环判定再动态调整位置外
插眼学习下,好更新到我的对话框里(x)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-28 11:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表