右侧像打字一样从左往右把字显现出来
05/121 浏览攻略
右侧角色打字机效果改进(PuppetTheater.lua:1064-1083):
左侧角色:保持不变,用 utf8Sub 截取子串 + NVG_ALIGN_LEFT,逐字从左往右出现
右侧角色:渲染完整文本(typewriter_.fullText)并使用 NVG_ALIGN_RIGHT 保持右对齐排版,通过 nvgScissor 设置一个从左向右逐渐扩大的裁剪区域,按 displayLen / totalLen 比例露出文字。打字完成后直接渲染完整文本(不再裁剪)
这样文字的最终排版位置从一开始就固定了(右对齐),只是通过裁剪遮罩逐步从左到右"揭开",实现了从左往右打字的视觉效果,同时文字不会跳动。
使用 nvgTextBoxBounds 的 scissor 方案是能看到打字效果的,只是速度偏快。让我恢复那个方案,并降低右侧的打字速度。
恢复 scissor 方案:右侧角色对话重新使用 nvgTextBoxBounds + nvgScissor 方案——始终渲染完整右对齐文本,通过裁剪遮罩从左到右逐步揭示,文字位置从一开始就固定不跳动。
降低右侧打字速度:在 setDialogue 中根据 bustSide_ 动态设置打字速度:
左侧角色:speed = 20(不变)
右侧角色:speed = 12(降低 40%)
同时将 bustSide_ 的声明前移到文件顶部,确保 setDialogue 能正确访问。
问题的根源不是 speed 值,而是 scissor 的宽度计算。nvgTextBoxBounds 返回的是整个文本框宽度(textW),而右对齐文本只占其中一部分。前半段动画在揭示空白区域,后半段才揭示文字,所以感觉很快。
修复方案:用字符数 × 字号估算实际文本像素宽度,让揭示速度和左侧一致,speed 也恢复为 20。
改动说明:
根因:之前用 nvgTextBoxBounds 返回的是整个文本框宽度(比如 400px),而右对齐文本实际只占其中一部分(比如 224px)。scissor 从框左边缘开始揭示,前半段动画都在扫过空白区,文字实际在最后一小段时间内集中出现,所以感觉很快。
修复:用 字符数 × 字号(16) 估算实际文本像素宽度,scissor 起点精确定位到文字左边缘,每个字符对应固定像素宽度的揭示。speed 恢复为 20,和左侧完全一致。



