From 4725bcff9f8cbcf0b94f662ebf2131c643ccc903 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 13 May 2020 23:31:54 +0800 Subject: [PATCH] =?UTF-8?q?splitLines=E6=A0=87=E7=82=B9=E7=A6=81=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/ui.js | 33 +++++++++++++++++++++++++++++++++ v2.x-final更新.txt | 14 +++++++------- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/libs/ui.js b/libs/ui.js index 71996bdc..b1ca9d0e 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -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; + } + } + } } } } diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index 1dbb0831..ffcb1d30 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -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_def(rmxp魔塔的坚固属性是通过一个全局量去指定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]这样的写法来使用跟随者的行走图作为头像