splitLines标点禁则

This commit is contained in:
ckcz123 2020-05-13 23:31:54 +08:00
parent 7134a2faba
commit 4725bcff9f
2 changed files with 40 additions and 7 deletions

View File

@ -360,23 +360,56 @@ ui.prototype.splitLines = function (name, text, maxWidth, font) {
if (!ctx) return [text];
if (font) core.setFont(name, font);
// 不能在行首的标点
var forbidStart = ")】》>﹞>)]»›〕〉}]」}〗』" + ",。?!:;·…,.?!:;、……~&@#";
// 不能在行尾的标点
var forbidEnd = "(【《<﹝<([«‹〔〈{[「{〖『";
var contents = [];
var last = 0;
var forceChangeLine = false; // 是否强制换行避免多个连续forbidStart存在
for (var i = 0; i < text.length; i++) {
if (text.charAt(i) == '\n') {
contents.push(text.substring(last, i));
last = i + 1;
forceChangeLine = false;
}
else if (text.charAt(i) == '\\' && text.charAt(i + 1) == 'n') {
contents.push(text.substring(last, i));
last = i + 2;
forceChangeLine = false;
}
else {
var curr = text.charAt(i);
var toAdd = text.substring(last, i + 1);
var width = core.calWidth(name, toAdd);
if (maxWidth && width > maxWidth) {
// --- 当前应当换行然而还是检查一下是否是forbidStart
if (!forceChangeLine && forbidStart.indexOf(curr) >= 0) {
forceChangeLine = true;
continue;
}
contents.push(text.substring(last, i));
last = i;
forceChangeLine = false;
} else {
// --- 当前不应该换行;但是提前检查一下是否是行尾标点
var curr = text.charAt(i);
if (forbidEnd.indexOf(curr) >= 0 && i < text.length -1) {
// 检查是否是行尾
var nextcurr = text.charAt(i+1);
// 确认不是手动换行
if (nextcurr != '\n' && !(nextcurr == '\\' && text.charAt(i+2) == 'n')) {
var toAdd = text.substring(last, i+2);
var width = core.calWidth(name, toAdd);
if (maxWidth && width > maxWidth) {
// 下一项会换行,因此在此处换行
contents.push(text.substring(last, i));
last = i;
forceChangeLine = false;
}
}
}
}
}
}

View File

@ -3,7 +3,7 @@
(已完成!) 3. 请求修复如果还没修复core.drawTip()不能使用系统图标和clear参数的bug建议增加一个参数来表示多帧图块绘制第几帧
(已完成!) 3.1 “UI绘制”类事件中的“绘制图标”同理
(已完成!\b[up,null]可实现此效果) 4. 建议显示文章的\b[]提供top和bottom这两种新写法来实现在顶部或底部显示对话框目前只有startText、firstArrive、eachArrive、useItemEvent和公共事件等没有当前点的事件中才能用up和down来临时实现这种效果否则就得设置剧情文本的属性这在频繁来回切换时是致命的就像《无上之光》RMXP版地上40层一样
5. 建议优化core.splitLines()来避免把单词打断和触犯标点禁则,如点号和右标号禁止用于行首,左标号禁止用于行尾
(已完成!) 5. 建议优化core.splitLines()来避免把单词打断和触犯标点禁则,如点号和右标号禁止用于行首,左标号禁止用于行尾
(已完成!) 6. core.drawAnimate()和对应的事件建议增加一个boolean型参数来表示坐标是绝对坐标即当前的实现还是在视野中的相对坐标以13*13为例相对坐标总是在0~12之间以实现形如“在视野正中心播放某某动画”的需求小地图可以写6,6大地图怎么办
(已完成!) 7. 建议把core.playBgm(bgm, startTime)的startTime参数在事件中也提供出来以用于一些演出比如适当的剧情处直接从高潮开始。同理可以让“暂停背景音乐”记录下当前播放到了第几秒并在“恢复背景音乐”中自动从这个秒数恢复。作者还可以手动配合音量渐变效果
(已完成!) 8. 系统设置菜单中“音量”和“步时”的点击区并不是根据文本长度自动适配的,这导致作者修改文本(包括但不限于翻译)后玩家难以找到准确的点击区,建议优化
@ -64,7 +64,7 @@
(不处理) 12. 来自鹿神和君浪坚固属性建议按照描述来去修改turn或hero_per_damage而不是mon_defrmxp魔塔的坚固属性是通过一个全局量去指定hero_per_damage的默认为1以免和模仿或者说仿防冲突
(不处理) 13. 破甲、反击、净化倍率、仇恨增量和是否减半,建议允许使用怪物的属性去覆盖全塔属性中的值,如不同的破甲怪破甲倍率不同
(已完成!) 14. (来自小艾)仇恨伤害和固伤合并进总伤害以免和负伤抵消
不处理) 15. 单点阻激夹域和血网伤害同时存在多种时,气泡提示的伤害类型存在覆盖现象,建议优化
已完成!) 15. 单点阻激夹域和血网伤害同时存在多种时,气泡提示的伤害类型存在覆盖现象,建议优化
(已完成!) 16. 来自小艾建议修复瞬移判定无视图快属性script项的bug
(已完成!) 17. 建议修复如果还没修复core.drawTip()不能使用系统图标和clear参数的bug并建议增加一个参数来表示多帧图块使用第几帧UI绘制事件中的绘制图标同理增加另一个参数来表示32*48图块绘制上2/3当前实现和手册一致还是下2/3
(不处理) 18. 来自群友推箱子、阻击、捕捉、重生、炸锤和afterXxx事件的系列问题...
@ -73,8 +73,8 @@
(不处理) 21. (来自群友)建议大幅缩减表格的长度,譬如把勾选项和单个数值类紧凑摆放
(已完成!) 22. betweenAttackMax在被四个怪同时夹击时比如上下楼后或通过事件使勇士和其中一只怪重合了目前是以上下方向的怪为准建议在表格注释中予以强调更合理的做法是在两种怪的战损中取max或min
(不处理) 23. displayIdInBook属性不能用于夹击QAQ同时建议给core.getBlockId()追加一个“如果是怪物是否按displayIdInBook进行映射”的参数。此外此属性会导致core.hasEnemyLeft()在指定id时失真不一定是坏事
不处理 24. core.hasEnemyLeft()不应该调用core.getCurrentEnemys()因为后者是用于手册的它为了按伤害升序排列而调用了core.getDamageInfo()而core.getDamageInfo()又会调用core.getEnemyInfo()但作者完全可能在core.getDamageInfo()或core.getEnemyInfo()中使用core.hasEnemyLeft()判断特定id的怪物是否存在从而实现一些类似光环的效果如协同这样就会造成死递归
(不处理) 25. 建议新增一个类似“勇士转向”的事件指令————“图块转向”用于NPC甚至怪物比如基于索引/数字对4取余毕竟用转变图块的话不够通用
已完成! 24. core.hasEnemyLeft()不应该调用core.getCurrentEnemys()因为后者是用于手册的它为了按伤害升序排列而调用了core.getDamageInfo()而core.getDamageInfo()又会调用core.getEnemyInfo()但作者完全可能在core.getDamageInfo()或core.getEnemyInfo()中使用core.hasEnemyLeft()判断特定id的怪物是否存在从而实现一些类似光环的效果如协同这样就会造成死递归
25. 建议新增一个类似“勇士转向”的事件指令————“图块转向”用于NPC甚至怪物比如基于索引/数字对4取余毕竟用转变图块的话不够通用
(已完成!) 26. “勇士转向”会导致跟随者聚集这不利于演出建议改成像core.turnHero()一样不聚集跟随者
(已完成!) 27. 勇士后退时跟随者很鬼畜,建议优化(每步聚集算是一种简陋的办法)
(不处理) 28. 勇士的移动帧只有2建议改为允许作者指定
@ -92,7 +92,7 @@
(已修复!) 38.2 移除圣锤道具的定义
(不处理) 39. 建议把样板自带的大部分tools类道具的useItemEffect用useItemEvent重写以方便作者参照学习我能说266都几个月了好多新作者和老作者压根不知道useItemEvent的存在吗
(已修复!) 40. 希望显示文章的\b提供top和bottom这两种新写法来实现在顶部或底部显示对话框目前只有firstArrive和eachArrive等没有当前点的事件中才能用up和down来临时实现这种效果否则就得设置剧情文本的属性这在频繁来回切换时是致命的就像《无上之光》RMXP版地上40层一样
41. 建议优化core.splitLines()来避免出现标点禁则(如点号和右标号不能用于行首,左标号不能用于行尾),同时也能更好地支持字母文字语言如英语(日语韩语等同样是方块字的倒不要紧)
(已完成!) 41. 建议优化core.splitLines()来避免出现标点禁则(如点号和右标号不能用于行首,左标号不能用于行尾),同时也能更好地支持字母文字语言如英语(日语韩语等同样是方块字的倒不要紧)
(已修复!) 42. core.drawAnimate()和对应的事件指令建议增加一个参数来表示坐标是绝对坐标即当前的实现还是在视野中的相对坐标以13*13为例相对坐标总是在0~12之间毕竟有些动画按相对坐标绘制才是作者的演出需求。
(不处理) 43. 来自鹿神希望给animate文件支持多音效、画面闪烁和图块闪烁
(已修复!) 44. 希望给“播放背景音乐”事件像core.playBgm()函数一样添加“从第几秒开始”的参数,以用于一些演出(比如适当的剧情处直接从高潮开始)。同理可以让“暂停背景音乐”记录下当前播放到了第几秒,并在“恢复背景音乐”中自动从这个秒数恢复。作者还可以手动配合音量渐变效果
@ -104,8 +104,8 @@
(不处理) 50. 建议给录像播放时的N键提供一个对应的移动端操作以方便移动端作者
(已完成!) 51. 希望给“显示选择项”、“显示确认框”、“等待用户操作”这三个事件添加一个“若多少毫秒内不响应则触发的分支”用来实现一些QTE录像中可以记录“choice: timeout”、“confirm: timeout”和“wait: timeout”来表示触发了超时分支
52. 希望给“转变图块”加一个淡入时间参数显隐和转变图层块也希望加个淡入淡出时间参数图层块也希望提供移动和跳跃事件专门用于原本是空地或空气墙的情况。目前要实现这样的效果必须使用红点然而红点有着“推箱子、阻击、捕捉、重生、炸锤和afterXxx事件”的系列问题且会导致core.removeBlock()隐藏事件退化为core.hideBlock()
53. 希望“移动事件”的移速和淡出速度拆开成两个参数,目前这样捆绑在一起不太自由
不处理 54. 建议把图块属性的noPass改为勾选框而不是下拉框因为null一定表示不可通行道具根本没有noPass
(不处理) 53. 希望“移动事件”的移速和淡出速度拆开成两个参数,目前这样捆绑在一起不太自由
已完成 54. 建议把图块属性的noPass改为勾选框而不是下拉框因为null一定表示不可通行道具根本没有noPass
(不处理,可以转变图块) 55. “移动事件”和“跳跃事件”会导致本来勾选了不显伤的怪物突然有了显伤,非常难看,建议优化
(不处理) 56. 希望推出一套能够对跟随者位置和坐标进行读写的API甚至事件指令并允许这些信息被计入存档以实现一些演出甚至游戏性效果如新新2用公主占位防冰块
(不处理) 57. 希望\t[hero]和\t[xxx,hero]能像图块一样绘制原地抖动的4帧全局动画而不是不动希望能使用勇士的当前朝向而不是一直朝下希望能使用\t[hero1]和\t[xxx,hero1]这样的写法来使用跟随者的行走图作为头像