Project1
标题:
英文rpgmakermv游戏汉化怎么解决换行问题
[打印本页]
作者:
醋酸铅
时间:
2024-9-12 21:51
标题:
英文rpgmakermv游戏汉化怎么解决换行问题
本帖最后由 醋酸铅 于 2024-9-12 21:52 编辑
最近在汉化一个英文RPG,然后发现文本改成中文以后会溢出文本框,
上网找了可以换行中文字符的YEP_MessageCore以后,发现换行效果并不好,
具体不好的地方有:
1.把行尾过长的英语单词截断,一半放上一行,一半放下一行
2.行头标点符号顶格
如果不能自动换行,就要手动添加换行符号,实在太累,而且后期想换一下字体,使用换行符可能会导致数字溢出文本框(因为很多字体数字和字母的宽度都有区别)
目前希望的效果如图所示
想问一下各位是怎么解决这类问题的
1.jpg
(87.79 KB, 下载次数: 1)
下载附件
保存到相册
2024-9-12 21:43 上传
作者:
百里_飞柳
时间:
7 天前
同想知道,除了不断循环判定再动态调整位置外
插眼学习下,好更新到我的对话框里(x)
作者:
utunnels
时间:
7 天前
只能吧YEP改改了,专门给中文写一套规则。
或者找个排版工具排完了再复制进去
作者:
utunnels
时间:
7 天前
本帖最后由 utunnels 于 2024-9-13 16:12 编辑
比如做个插件放在YEP后面
function isChineseWordBreak(textState){
return true;
}
function charMode(c){
var marks = '\uff0c\u3002\uff1a\u3001\uff1b\u00b7';
var newMode = {};
newMode.isM = marks.contains(c);
newMode.isC = (c.charCodeAt(0)>256 && !newMode.isM);
newMode.isE = c.charCodeAt(0)<256;
newMode.isS = /\s/.test(c);
return newMode;
}
function findNextSpace(textState){
var mode = {isNew:true};
for(var i=textState.index;i<textState.text.length;i++){
var newMode = charMode(textState.text[i]);
if(!mode.isNew){
if(newMode.isS) return i;
if(newMode.isC) return i;
if(newMode.isE && !mode.isE) return i;
}
mode = newMode;
}
return -1;
}
Window_Base.prototype.checkWordWrap = function(textState) {
if (!textState) return false;
if (!this._wordWrap) return false;
var size = 0;
if (isChineseWordBreak(textState)) {
var nextSpace = findNextSpace(textState);
var nextBreak = textState.text.indexOf('\n', textState.index + 1);
if (nextSpace < 0) nextSpace = textState.text.length + 1;
if (nextBreak > 0) nextSpace = Math.min(nextSpace, nextBreak);
var word = textState.text.substring(textState.index, nextSpace);
size = this.textWidthExCheck(word);console.log(word,size);
}
var ww = (size + textState.x > this.wordwrapWidth());
if(ww) textState.index--;
return ww;
};
复制代码
作者:
utunnels
时间:
7 天前
也可以试试这个版本,据说是根据文本框的换行规则来写的
https://forums.rpgmakerweb.com/i ... v3-0-is-out.139627/
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1