From 79f7c89e238433ef720d6170b6d1d9db3409954f Mon Sep 17 00:00:00 2001 From: YHH <359807859@qq.com> Date: Thu, 9 Oct 2025 17:44:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=86=8D=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E4=B8=8Bbuffer=E5=85=BC=E5=AE=B9=E6=80=A7?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/ECS/Scene.ts | 10 +++++++--- .../src/ECS/Serialization/IncrementalSerializer.ts | 10 +++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/core/src/ECS/Scene.ts b/packages/core/src/ECS/Scene.ts index 40865517..2f2a8efc 100644 --- a/packages/core/src/ECS/Scene.ts +++ b/packages/core/src/ECS/Scene.ts @@ -639,9 +639,13 @@ export class Scene implements IScene { incremental: IncrementalSnapshot | string | Buffer, componentRegistry?: Map ): void { - const snapshot = (typeof incremental === 'string' || Buffer.isBuffer(incremental)) - ? IncrementalSerializer.deserializeIncremental(incremental) - : incremental; + const isSerializedData = typeof incremental === 'string' || + (typeof Buffer !== 'undefined' && Buffer.isBuffer(incremental)) || + incremental instanceof Uint8Array; + + const snapshot = isSerializedData + ? IncrementalSerializer.deserializeIncremental(incremental as string | Buffer) + : incremental as IncrementalSnapshot; const registry = componentRegistry || ComponentRegistry.getAllComponentNames() as Map; diff --git a/packages/core/src/ECS/Serialization/IncrementalSerializer.ts b/packages/core/src/ECS/Serialization/IncrementalSerializer.ts index 95012d5e..63f40f48 100644 --- a/packages/core/src/ECS/Serialization/IncrementalSerializer.ts +++ b/packages/core/src/ECS/Serialization/IncrementalSerializer.ts @@ -687,7 +687,15 @@ export class IncrementalSerializer { if (typeof data === 'string') { // JSON格式:计算UTF-8编码后的字节数 - return Buffer.byteLength(data, 'utf8'); + // 使用 Blob 来计算浏览器和 Node.js 环境兼容的字节数 + if (typeof Blob !== 'undefined') { + return new Blob([data]).size; + } else if (typeof Buffer !== 'undefined') { + return Buffer.byteLength(data, 'utf8'); + } else { + // 回退方案:粗略估算(不精确,但可用) + return new TextEncoder().encode(data).length; + } } else { // 二进制格式:直接返回Buffer长度 return data.length;