From cfdc3514ccc294b812976b91a159a57a149a3ad3 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Mon, 23 Jun 2025 18:50:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20TextContent=20=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E4=B8=8E=E6=8E=92=E7=89=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/render/components/textboxTyper.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages-user/client-modules/src/render/components/textboxTyper.ts b/packages-user/client-modules/src/render/components/textboxTyper.ts index 575491b..879383e 100644 --- a/packages-user/client-modules/src/render/components/textboxTyper.ts +++ b/packages-user/client-modules/src/render/components/textboxTyper.ts @@ -100,7 +100,7 @@ export interface ITextContentRenderable { fontSize: number; /** 这段文字的分行信息,每一项表示在对应索引后分词 */ splitLines: number[]; - /** 这段文字的分词信息,每一项表示在对于索引后分行 */ + /** 这段文字的分词信息,每一项表示在对应索引后分行 */ wordBreak: number[]; /** 最后一行的宽度 */ lastLineWidth?: number; @@ -317,9 +317,9 @@ export class TextContentTyper extends EventEmitter { if (line < 0 || line > renderable.splitLines.length) { return false; } - const start = renderable.splitLines[line - 1] ?? 0; + const start = (renderable.splitLines[line - 1] ?? -1) + 1; const end = - renderable.splitLines[line] ?? renderable.text.length; + (renderable.splitLines[line] ?? renderable.text.length) + 1; const lineHeight = this.renderObject.lineHeights[this.nowLine]; const data: TyperTextRenderable = { @@ -544,7 +544,7 @@ export class TextContentParser { private font: string = ''; /** 当前解析出的文字 */ private resolved: string = ''; - /** 当前的分词信息 */ + /** 当前的分词信息,每一项表示在对应的字符索引后分词 */ private wordBreak: number[] = []; // 在分行中,会出现上一个渲染数据的最后并不能组成一个完整的行,这时候需要把最后一个不完整的行的宽度记录下来 @@ -982,6 +982,7 @@ export class TextContentParser { this.bsStart = breakIndex; return false; } else { + this.bsStart = this.lastBreakIndex; this.bsEnd = breakIndex; let maxWidth = rest; // 循环二分,直到不能分行 @@ -1083,7 +1084,7 @@ export class TextContentParser { return false; } else { // 如果可以构成完整的行,那么循环二分 - const lastBreak = wordBreak.at(-1)!; + const lastBreak = wordBreak.length - 1; this.bsStart = this.lastBreakIndex; this.bsEnd = lastBreak; let maxWidth = rest; @@ -1242,6 +1243,9 @@ export class TextContentParser { const data = this.renderable[this.nowRenderable]; wordBreak.push(pointer); data.splitLines.push(pointer); + this.lineWidth = 0; + this.lastBreakIndex = wordBreak.length - 1; + this.lineStart = pointer; continue; } @@ -1250,6 +1254,9 @@ export class TextContentParser { wordBreak.push(pointer); data.splitLines.push(pointer); pointer++; + this.lineWidth = 0; + this.lastBreakIndex = wordBreak.length - 1; + this.lineStart = pointer; continue; } @@ -1270,6 +1277,8 @@ export class TextContentParser { this.lineHeights.push(this.lineHeight); this.lineWidths.push(this.lineWidth); + console.log(this.renderable); + return { lineHeights: this.lineHeights, data: this.renderable,