From e8a07c695e941fa288fdfa0b1c40285e4b7501e3 Mon Sep 17 00:00:00 2001 From: janing Date: Sat, 29 Nov 2025 01:42:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=8F=91=E5=B8=83asm.js?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pinball/Physics/WasmPhysicsEngine.ts | 26 ++-- .../Pinball/Physics/WasmPhysicsEngine.ts.meta | 9 ++ client-cocos/assets/wasm/WasmLoadTest.ts.meta | 9 ++ .../assets/wasm/pinball_physics.asm.js | 3 + .../assets/wasm/pinball_physics.asm.js.meta | 9 ++ client-cocos/assets/wasm/pinball_physics.bin | 3 + .../assets/wasm/pinball_physics.bin.meta | 12 ++ client-cocos/assets/wasm/pinball_physics.wasm | 3 - client-cocos/build-physics.bat | 116 +++++++++--------- tools/emscripten/gen-asm.bat | 107 ++++++++-------- tools/emscripten/install.bat | 62 +++++----- 11 files changed, 202 insertions(+), 157 deletions(-) create mode 100644 client-cocos/assets/scripts/Modules/Pinball/Physics/WasmPhysicsEngine.ts.meta create mode 100644 client-cocos/assets/wasm/WasmLoadTest.ts.meta create mode 100644 client-cocos/assets/wasm/pinball_physics.asm.js create mode 100644 client-cocos/assets/wasm/pinball_physics.asm.js.meta create mode 100644 client-cocos/assets/wasm/pinball_physics.bin create mode 100644 client-cocos/assets/wasm/pinball_physics.bin.meta delete mode 100644 client-cocos/assets/wasm/pinball_physics.wasm diff --git a/client-cocos/assets/scripts/Modules/Pinball/Physics/WasmPhysicsEngine.ts b/client-cocos/assets/scripts/Modules/Pinball/Physics/WasmPhysicsEngine.ts index e2b8f2d..2d7bf7f 100644 --- a/client-cocos/assets/scripts/Modules/Pinball/Physics/WasmPhysicsEngine.ts +++ b/client-cocos/assets/scripts/Modules/Pinball/Physics/WasmPhysicsEngine.ts @@ -21,7 +21,7 @@ export class WasmPhysicsEngine implements IPhysicsEngine { * @param settings 物理设置 * @param wasmFactory WASM工厂函数(可选,推荐使用) */ - async initialize(settings: PhysicsSettings, wasmFactory?: any): Promise { + async initialize(settings: PhysicsSettings ): Promise { if (this.state === WasmModuleState.LOADED) { return; } @@ -29,15 +29,7 @@ export class WasmPhysicsEngine implements IPhysicsEngine { this.state = WasmModuleState.LOADING; try { - if (wasmFactory) { - // 使用新的 WasmLoader(推荐方式) - await this.initializeWithWasmLoader(wasmFactory); - } else { - // 回退到旧的加载方式(保持向后兼容) - console.warn('使用旧的 WASM 加载方式,推荐提供 wasmFactory 参数使用 WasmLoader'); - await this.initializeLegacy(); - } - + await this.initializeLegacy(); this.state = WasmModuleState.LOADED; console.log('WASM Physics Engine initialized successfully'); @@ -102,8 +94,18 @@ export class WasmPhysicsEngine implements IPhysicsEngine { */ private async initializeLegacy(): Promise { // 加载 WASM 文件 - const wasmPath = 'assets/wasm/pinball_physics.wasm'; - const wasmResponse = await fetch(wasmPath); + const result = await wasmLoader.loadWasmWithAsmFallback( + wasmFactory, // WASM 工厂函数 + asmFactory, // ASM 工厂函数 + 'pinball_physics.wasm', // WASM 文件名 + 'pinball_physics.asm.mem', // ASM 内存文件名 + '44cacb3c-e901-455d-b3e1-1c38a69718e1', // WASM UUID + '3400003e-dc3c-43c1-8757-3e082429125a', // ASM UUID + 'wasmFiles' // Bundle 名称 + ); + + console.log('模块加载成功,使用的是:', result.isWasm ? 'WASM' : 'ASM'); + console.log('模块实例:', result.instance); if (!wasmResponse.ok) { throw new Error(`Failed to fetch WASM file: ${wasmResponse.statusText}`); diff --git a/client-cocos/assets/scripts/Modules/Pinball/Physics/WasmPhysicsEngine.ts.meta b/client-cocos/assets/scripts/Modules/Pinball/Physics/WasmPhysicsEngine.ts.meta new file mode 100644 index 0000000..ca124fb --- /dev/null +++ b/client-cocos/assets/scripts/Modules/Pinball/Physics/WasmPhysicsEngine.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "c244f34a-30ab-4c13-ad52-9660a71d9cc4", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/client-cocos/assets/wasm/WasmLoadTest.ts.meta b/client-cocos/assets/wasm/WasmLoadTest.ts.meta new file mode 100644 index 0000000..fd2e1b1 --- /dev/null +++ b/client-cocos/assets/wasm/WasmLoadTest.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "005f083e-a7f9-483a-bc2c-cec96e4098c0", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/client-cocos/assets/wasm/pinball_physics.asm.js b/client-cocos/assets/wasm/pinball_physics.asm.js new file mode 100644 index 0000000..3814ded --- /dev/null +++ b/client-cocos/assets/wasm/pinball_physics.asm.js @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:517162ff317fc86225e225eebd7d8c761271325e97c42f2d197a0792d1324ed2 +size 15895944 diff --git a/client-cocos/assets/wasm/pinball_physics.asm.js.meta b/client-cocos/assets/wasm/pinball_physics.asm.js.meta new file mode 100644 index 0000000..952cad0 --- /dev/null +++ b/client-cocos/assets/wasm/pinball_physics.asm.js.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "javascript", + "imported": true, + "uuid": "1205a156-e26f-489c-acc2-274040636dfd", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/client-cocos/assets/wasm/pinball_physics.bin b/client-cocos/assets/wasm/pinball_physics.bin new file mode 100644 index 0000000..c1525fa --- /dev/null +++ b/client-cocos/assets/wasm/pinball_physics.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6f37fa3144b91773595dc32729e31e680e4785c9154bd51090f36cd758008e9 +size 20938104 diff --git a/client-cocos/assets/wasm/pinball_physics.bin.meta b/client-cocos/assets/wasm/pinball_physics.bin.meta new file mode 100644 index 0000000..55255d1 --- /dev/null +++ b/client-cocos/assets/wasm/pinball_physics.bin.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.0.3", + "importer": "buffer", + "imported": true, + "uuid": "b209ab60-b43e-4dda-b9a9-401e28fd8735", + "files": [ + ".bin", + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/client-cocos/assets/wasm/pinball_physics.wasm b/client-cocos/assets/wasm/pinball_physics.wasm deleted file mode 100644 index 6c62a4e..0000000 --- a/client-cocos/assets/wasm/pinball_physics.wasm +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:798d25f96cbd922e18d230c67c4ce0db3e76ea83f97526e6723057f1d14c4801 -size 666186 diff --git a/client-cocos/build-physics.bat b/client-cocos/build-physics.bat index e8eb806..c1838cd 100644 --- a/client-cocos/build-physics.bat +++ b/client-cocos/build-physics.bat @@ -2,163 +2,163 @@ setlocal enabledelayedexpansion echo ======================================== -echo Pinball Physics 构建脚本 +echo Pinball Physics ű echo ======================================== echo. -:: 设置构建模式,默认为 debug +:: ùģʽĬΪ debug set BUILD_MODE=%1 if "%BUILD_MODE%"=="" set BUILD_MODE=debug -:: 验证构建模式 +:: ֤ģʽ if /i "%BUILD_MODE%" neq "debug" if /i "%BUILD_MODE%" neq "release" ( - echo 错误: 无效的构建模式 "%BUILD_MODE%" - echo 支持的模式: debug ^| release + echo : ЧĹģʽ "%BUILD_MODE%" + echo ֵ֧ģʽ: debug ^| release echo. - echo 用法: build-physics.bat [debug^|release] - echo 示例: build-physics.bat release + echo ÷: build-physics.bat [debug^|release] + echo ʾ: build-physics.bat release goto :error ) -echo 构建模式: %BUILD_MODE% +echo ģʽ: %BUILD_MODE% echo. -:: 设置路径变量 +:: · set SCRIPT_DIR=%~dp0 set PROJECT_ROOT=%SCRIPT_DIR%..\ set PHYSICS_DIR=%PROJECT_ROOT%pinball-physics set TARGET_DIR=%PHYSICS_DIR%\target\wasm32-unknown-unknown\%BUILD_MODE% set WASM_SOURCE=%TARGET_DIR%\pinball_physics.wasm set WASM_OUTPUT=%SCRIPT_DIR%assets\wasm\pinball_physics.bin -set ASM_OUTPUT=%SCRIPT_DIR%assets\wasm\pinball_physics.js +set ASM_OUTPUT=%SCRIPT_DIR%assets\wasm\pinball_physics.asm.js set EMSCRIPTEN_TOOL=%PROJECT_ROOT%tools\emscripten\gen-asm.bat -echo 路径配置: -echo 物理引擎目录: %PHYSICS_DIR% -echo WASM 源文件: %WASM_SOURCE% -echo WASM 输出: %WASM_OUTPUT% -echo asm.js 输出: %ASM_OUTPUT% +echo ·: +echo Ŀ¼: %PHYSICS_DIR% +echo WASM Դļ: %WASM_SOURCE% +echo WASM : %WASM_OUTPUT% +echo asm.js : %ASM_OUTPUT% echo. -:: 检查物理引擎项目是否存在 +:: ĿǷ if not exist "%PHYSICS_DIR%\Cargo.toml" ( - echo 错误: 未找到物理引擎项目 - echo 路径: %PHYSICS_DIR% + echo : δҵĿ + echo ·: %PHYSICS_DIR% goto :error ) -:: 检查 Rust 是否安装 +:: Rust Ƿװ rustc --version >nul 2>&1 if %errorlevel% neq 0 ( - echo 错误: 未找到 Rust 编译器 - echo 请先安装 Rust: https://rustup.rs/ + echo : δҵ Rust + echo Ȱװ Rust: https://rustup.rs/ goto :error ) -:: 检查 wasm32-unknown-unknown 目标是否安装 +:: wasm32-unknown-unknown ĿǷװ rustup target list --installed | findstr "wasm32-unknown-unknown" >nul 2>&1 if %errorlevel% neq 0 ( - echo 安装 wasm32-unknown-unknown 目标... + echo װ wasm32-unknown-unknown Ŀ... rustup target add wasm32-unknown-unknown if %errorlevel% neq 0 ( - echo 错误: 安装 wasm32-unknown-unknown 目标失败 + echo : װ wasm32-unknown-unknown Ŀʧ goto :error ) ) -:: 创建输出目录 +:: Ŀ¼ if not exist "%SCRIPT_DIR%assets\wasm" ( - echo 创建输出目录: assets\wasm + echo Ŀ¼: assets\wasm mkdir "%SCRIPT_DIR%assets\wasm" ) echo ---------------------------------------- -echo 第1步: 编译物理引擎 (模式: %BUILD_MODE%) +echo 1: (ģʽ: %BUILD_MODE%) echo ---------------------------------------- echo. -:: 切换到物理引擎目录并编译 +:: лĿ¼ cd /d "%PHYSICS_DIR%" if /i "%BUILD_MODE%"=="release" ( - echo 执行命令: cargo build --target wasm32-unknown-unknown --release + echo ִ: cargo build --target wasm32-unknown-unknown --release cargo build --target wasm32-unknown-unknown --release ) else ( - echo 执行命令: cargo build --target wasm32-unknown-unknown + echo ִ: cargo build --target wasm32-unknown-unknown cargo build --target wasm32-unknown-unknown ) if %errorlevel% neq 0 ( - echo 错误: 物理引擎编译失败 + echo : ʧ goto :error ) -:: 检查编译输出是否存在 +:: Ƿ if not exist "%WASM_SOURCE%" ( - echo 错误: 编译输出文件不存在 - echo 期望位置: %WASM_SOURCE% + echo : ļ + echo λ: %WASM_SOURCE% goto :error ) -:: 显示编译结果信息 +:: ʾϢ for %%A in ("%WASM_SOURCE%") do ( set source_size=%%~zA set /a size_kb=!source_size!/1024 - echo 编译成功! 文件大小: !size_kb! KB + echo ɹ! ļС: !size_kb! KB ) echo. echo ---------------------------------------- -echo 第2步: 拷贝 WASM 文件 +echo 2: WASM ļ echo ---------------------------------------- echo. -:: 拷贝 WASM 文件到客户端资源目录 -echo 拷贝: %WASM_SOURCE% -echo 到: %WASM_OUTPUT% +:: WASM ļͻԴĿ¼ +echo : %WASM_SOURCE% +echo : %WASM_OUTPUT% copy "%WASM_SOURCE%" "%WASM_OUTPUT%" >nul if %errorlevel% neq 0 ( - echo 错误: 拷贝 WASM 文件失败 + echo : WASM ļʧ goto :error ) -echo 拷贝成功! +echo ɹ! echo. echo ---------------------------------------- -echo 第3步: 生成 asm.js 文件 +echo 3: asm.js ļ echo ---------------------------------------- echo. -:: 检查 Emscripten 转换工具是否存在 +:: Emscripten תǷ if not exist "%EMSCRIPTEN_TOOL%" ( - echo 错误: 未找到 Emscripten 转换工具 - echo 路径: %EMSCRIPTEN_TOOL% - echo 请先运行: tools\emscripten\install.bat + echo : δҵ Emscripten ת + echo ·: %EMSCRIPTEN_TOOL% + echo : tools\emscripten\install.bat goto :error ) -:: 切换回项目根目录 +:: лĿĿ¼ cd /d "%PROJECT_ROOT%" -:: 执行 WASM 到 asm.js 转换 -echo 执行转换: WASM → asm.js -echo 命令: %EMSCRIPTEN_TOOL% "%WASM_SOURCE%" "%ASM_OUTPUT%" +:: ִ WASM asm.js ת +echo ִת: WASM asm.js +echo : %EMSCRIPTEN_TOOL% "%WASM_SOURCE%" "%ASM_OUTPUT%" echo. call "%EMSCRIPTEN_TOOL%" "%WASM_SOURCE%" "%ASM_OUTPUT%" if %errorlevel% neq 0 ( - echo 错误: asm.js 转换失败 + echo : asm.js תʧ goto :error ) echo. echo ======================================== -echo 构建完成! +echo ɣ echo ======================================== echo. -echo 输出文件: +echo ļ: echo WASM: %WASM_OUTPUT% if exist "%ASM_OUTPUT%" ( for %%A in ("%WASM_OUTPUT%") do ( @@ -171,20 +171,20 @@ if exist "%ASM_OUTPUT%" ( ) echo asm.js: %ASM_OUTPUT% echo. - echo 文件大小: + echo ļС: echo WASM: !wasm_kb! KB echo asm.js: !asm_kb! KB ) echo. -echo 构建模式: %BUILD_MODE% -echo 可以在 Cocos Creator 中使用这些文件了! +echo ģʽ: %BUILD_MODE% +echo Cocos Creator ʹЩļˣ goto :end :error echo. echo ======================================== -echo 构建失败! +echo ʧܣ echo ======================================== exit /b 1 diff --git a/tools/emscripten/gen-asm.bat b/tools/emscripten/gen-asm.bat index b35243c..5ba3a0a 100644 --- a/tools/emscripten/gen-asm.bat +++ b/tools/emscripten/gen-asm.bat @@ -2,17 +2,17 @@ setlocal enabledelayedexpansion echo ======================================== -echo WASM to asm.js 转换器 +echo WASM to asm.js ת echo ======================================== echo. -:: 检查参数 +:: if "%~1"=="" ( - echo 错误: 缺少 WASM 文件路径参数 + echo : ȱ WASM ļ· echo. - echo 用法: gen-asm.bat ^ ^<输出路径^> + echo ÷: gen-asm.bat ^ ^<·^> echo. - echo 示例: + echo ʾ: echo gen-asm.bat pinball.wasm output/pinball-asm.js echo gen-asm.bat ../target/wasm32-unknown-unknown/release/pinball_physics.wasm ../client-cocos/assets/wasm/pinball-asm.js echo. @@ -20,9 +20,9 @@ if "%~1"=="" ( ) if "%~2"=="" ( - echo 错误: 缺少输出路径参数 + echo : ȱ· echo. - echo 用法: gen-asm.bat ^ ^<输出路径^> + echo ÷: gen-asm.bat ^ ^<·^> echo. goto :error ) @@ -30,101 +30,102 @@ if "%~2"=="" ( set WASM_FILE=%~1 set OUTPUT_FILE=%~2 set SCRIPT_DIR=%~dp0 +echo űĿ¼: %SCRIPT_DIR% -:: 转换为绝对路径 +:: תΪ· for %%i in ("%WASM_FILE%") do set WASM_FILE_ABS=%%~fi for %%i in ("%OUTPUT_FILE%") do set OUTPUT_FILE_ABS=%%~fi for %%i in ("%OUTPUT_FILE_ABS%") do set OUTPUT_DIR=%%~dpi -:: 检查输入文件是否存在 +:: ļǷ if not exist "%WASM_FILE_ABS%" ( - echo 错误: WASM 文件不存在: %WASM_FILE_ABS% + echo : WASM ļ: %WASM_FILE_ABS% goto :error ) -:: 创建输出目录(如果不存在) +:: Ŀ¼ڣ if not exist "%OUTPUT_DIR%" ( - echo 创建输出目录: %OUTPUT_DIR% + echo Ŀ¼: %OUTPUT_DIR% mkdir "%OUTPUT_DIR%" ) -echo 输入文件: %WASM_FILE_ABS% -echo 输出文件: %OUTPUT_FILE_ABS% +echo ļ: %WASM_FILE_ABS% +echo ļ: %OUTPUT_FILE_ABS% echo. -:: 检查 Emscripten 环境 +:: Emscripten call emcc --version >nul 2>&1 if %errorlevel% neq 0 ( - echo Emscripten 环境未设置,尝试自动设置... + echo Emscripten δãԶ... if exist "%SCRIPT_DIR%emsdk\emsdk_env.bat" ( - echo 运行 Emscripten 环境设置... + echo Emscripten ... call "%SCRIPT_DIR%emsdk\emsdk_env.bat" call emcc --version >nul 2>&1 if %errorlevel% neq 0 ( - echo 错误: 无法设置 Emscripten 环境 - echo 请先运行 install.bat 安装 Emscripten,或手动运行 setup-env.bat + echo : ޷ Emscripten + echo install.bat װ Emscriptenֶ setup-env.bat goto :error ) ) else ( - echo 错误: 未找到 Emscripten 安装 - echo 请先运行 install.bat 安装 Emscripten + echo : δҵ Emscripten װ + echo install.bat װ Emscripten goto :error ) ) -echo Emscripten 版本信息: +echo Emscripten 汾Ϣ: call emcc --version | findstr "emcc" echo. -echo 开始转换 WASM 到 asm.js... +echo ʼת WASM asm.js... -:: 使用 emcc 将 WASM 转换为 asm.js -:: 关键参数说明: -:: -s WASM=0 : 禁用 WebAssembly,生成 asm.js -:: -s LEGACY_VM_SUPPORT=1 : 支持较老的 JavaScript 引擎 -:: -s ALLOW_MEMORY_GROWTH=1 : 允许内存增长 -:: -s NO_EXIT_RUNTIME=1 : 不退出运行时 -:: -s EXPORTED_FUNCTIONS=["_main"] : 导出函数(根据需要调整) -:: -s MODULARIZE=1 : 生成模块化代码 -:: -s EXPORT_NAME="Module" : 导出模块名 -:: -O3 : 最高优化级别 +:: ʹ wasm2js ߽ WASM תΪ asm.js +:: wasm2js Binaryen һ֣Emscripten Դ +:: ˵: +:: --pedantic : ʹøϸ֤ +:: -o : ļ· -call emcc "%WASM_FILE_ABS%" ^ - -s WASM=0 ^ - -s LEGACY_VM_SUPPORT=1 ^ - -s ALLOW_MEMORY_GROWTH=1 ^ - -s NO_EXIT_RUNTIME=1 ^ - -s MODULARIZE=1 ^ - -s EXPORT_NAME="PinballModule" ^ - -s EXPORTED_RUNTIME_METHODS="['ccall','cwrap']" ^ - -O3 ^ - --closure 0 ^ - -o "%OUTPUT_FILE_ABS%" +set WASM2JS_PATH=%SCRIPT_DIR%emsdk\upstream\bin\wasm2js.exe + +:: wasm2js Ƿ +if not exist "%WASM2JS_PATH%" ( + echo : δҵ wasm2js + echo ·: %WASM2JS_PATH% + echo ȷ Emscripten ȷװ + goto :error +) + +echo ʹù: %WASM2JS_PATH% +echo. + +call "%WASM2JS_PATH%" "%WASM_FILE_ABS%" ^ + -o "%OUTPUT_FILE_ABS%" ^ + --pedantic if %errorlevel% neq 0 ( - echo 错误: 转换失败 + echo : wasm2js תʧ goto :error ) echo. echo ======================================== -echo 转换成功! +echo תɹ echo ======================================== echo. -echo 输出文件: %OUTPUT_FILE_ABS% +echo ļ: %OUTPUT_FILE_ABS% -:: 显示文件大小 +:: ʾļС for %%A in ("%OUTPUT_FILE_ABS%") do ( set file_size=%%~zA set /a size_kb=!file_size!/1024 - echo 文件大小: !size_kb! KB + echo ļС: !size_kb! KB ) echo. -echo 使用方法: -echo 在 HTML 中引入生成的 JS 文件,然后使用: +echo ʹ÷: +echo HTML ɵ JS ļȻʹ: echo PinballModule().then(function(Module) { -echo // 使用 Module.ccall 调用导出的函数 +echo // ʹ Module.ccall õĺ echo var result = Module.ccall('function_name', 'number', ['number'], [42]); echo }); echo. @@ -133,7 +134,7 @@ goto :end :error echo. -echo 转换失败! +echo תʧܣ exit /b 1 :end diff --git a/tools/emscripten/install.bat b/tools/emscripten/install.bat index 74c27ee..758878f 100644 --- a/tools/emscripten/install.bat +++ b/tools/emscripten/install.bat @@ -2,102 +2,102 @@ setlocal enabledelayedexpansion echo ======================================== -echo Emscripten 安装脚本 (版本: 3.1.41) +echo Emscripten װű (汾: 3.1.41) echo ======================================== echo. -:: 设置变量 +:: ñ set EMSCRIPTEN_VERSION=3.1.41 set SCRIPT_DIR=%~dp0 set EMSDK_DIR=%SCRIPT_DIR%emsdk -:: 检查是否已存在 emsdk 目录 +:: ǷѴ emsdk Ŀ¼ if exist "%EMSDK_DIR%" ( - echo 检测到已存在的 emsdk 目录... - set /p "choice=是否重新安装? (y/n): " + echo ⵽Ѵڵ emsdk Ŀ¼... + set /p "choice=Ƿ°װ? (y/n): " if /i "!choice!" neq "y" ( - echo 安装已取消 - goto :end + goto :install ) - echo 删除现有安装... + echo ɾаװ... rmdir /s /q "%EMSDK_DIR%" ) -:: 检查 Git 是否可用 +:: Git Ƿ git --version >nul 2>&1 if %errorlevel% neq 0 ( - echo 错误: 未找到 Git,请先安装 Git + echo : δҵ GitȰװ Git goto :error ) -:: 检查 Python 是否可用 +:: Python Ƿ python --version >nul 2>&1 if %errorlevel% neq 0 ( - echo 错误: 未找到 Python,请先安装 Python 3.x + echo : δҵ PythonȰװ Python 3.x goto :error ) -echo 开始下载 Emscripten SDK... +echo ʼ Emscripten SDK... cd /d "%SCRIPT_DIR%" git clone https://github.com/emscripten-core/emsdk.git if %errorlevel% neq 0 ( - echo 错误: 下载 Emscripten SDK 失败 + echo : Emscripten SDK ʧ goto :error ) +:install echo. -echo 进入 emsdk 目录... +echo emsdk Ŀ¼... cd "%EMSDK_DIR%" -echo 安装和激活 Emscripten %EMSCRIPTEN_VERSION%... +echo װͼ Emscripten %EMSCRIPTEN_VERSION%... call emsdk.bat install %EMSCRIPTEN_VERSION% if %errorlevel% neq 0 ( - echo 错误: 安装 Emscripten %EMSCRIPTEN_VERSION% 失败 + echo : װ Emscripten %EMSCRIPTEN_VERSION% ʧ goto :error ) echo. -echo 激活 Emscripten %EMSCRIPTEN_VERSION%... +echo Emscripten %EMSCRIPTEN_VERSION%... call emsdk.bat activate %EMSCRIPTEN_VERSION% if %errorlevel% neq 0 ( - echo 错误: 激活 Emscripten %EMSCRIPTEN_VERSION% 失败 + echo : Emscripten %EMSCRIPTEN_VERSION% ʧ goto :error ) echo. -echo 设置环境变量... +echo û... call emsdk_env.bat echo. -echo 验证安装... +echo ֤װ... call emcc --version if %errorlevel% neq 0 ( - echo 错误: Emscripten 安装验证失败 + echo : Emscripten װ֤ʧ goto :error ) echo. echo ======================================== -echo Emscripten %EMSCRIPTEN_VERSION% 安装成功! +echo Emscripten %EMSCRIPTEN_VERSION% װɹ echo ======================================== echo. -echo 注意事项: -echo 1. 每次使用前需要运行 setup-env.bat 来设置环境变量 -echo 2. 或者手动运行: tools\emscripten\emsdk\emsdk_env.bat +echo ע: +echo 1. ÿʹǰҪ setup-env.bat û +echo 2. ֶ: tools\emscripten\emsdk\emsdk_env.bat echo. -echo 创建快速设置脚本... +echo ýű... echo @echo off > "%SCRIPT_DIR%setup-env.bat" -echo echo 设置 Emscripten 环境变量... >> "%SCRIPT_DIR%setup-env.bat" +echo echo Emscripten ... >> "%SCRIPT_DIR%setup-env.bat" echo call "%EMSDK_DIR%\emsdk_env.bat" >> "%SCRIPT_DIR%setup-env.bat" -echo echo Emscripten 环境已设置完成 >> "%SCRIPT_DIR%setup-env.bat" +echo echo Emscripten >> "%SCRIPT_DIR%setup-env.bat" -echo setup-env.bat 已创建 +echo setup-env.bat Ѵ goto :end :error echo. echo ======================================== -echo 安装失败!请检查错误信息 +echo װʧܣϢ echo ======================================== exit /b 1