@echo off setlocal enabledelayedexpansion echo ======================================== echo Pinball Physics 构建脚本 echo ======================================== echo. :: 设置构建模式,默认为 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. echo 用法: build-physics.bat [debug^|release] echo 示例: build-physics.bat release goto :error ) 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.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. :: 检查物理引擎项目是否存在 if not exist "%PHYSICS_DIR%\Cargo.toml" ( echo 错误: 未找到物理引擎项目 echo 路径: %PHYSICS_DIR% goto :error ) :: 检查 Rust 是否安装 rustc --version >nul 2>&1 if %errorlevel% neq 0 ( echo 错误: 未找到 Rust 编译器 echo 请先安装 Rust: https://rustup.rs/ goto :error ) :: 检查 wasm32-unknown-unknown 目标是否安装 rustup target list --installed | findstr "wasm32-unknown-unknown" >nul 2>&1 if %errorlevel% neq 0 ( echo 安装 wasm32-unknown-unknown 目标... rustup target add wasm32-unknown-unknown if %errorlevel% neq 0 ( echo 错误: 安装 wasm32-unknown-unknown 目标失败 goto :error ) ) :: 创建输出目录 if not exist "%SCRIPT_DIR%assets\wasm" ( echo 创建输出目录: assets\wasm mkdir "%SCRIPT_DIR%assets\wasm" ) echo ---------------------------------------- echo 第1步: 编译物理引擎 (模式: %BUILD_MODE%) echo ---------------------------------------- echo. :: 切换到物理引擎目录并编译 cd /d "%PHYSICS_DIR%" if /i "%BUILD_MODE%"=="release" ( echo 执行命令: cargo build --target wasm32-unknown-unknown --release cargo build --target wasm32-unknown-unknown --release ) else ( echo 执行命令: cargo build --target wasm32-unknown-unknown cargo build --target wasm32-unknown-unknown ) if %errorlevel% neq 0 ( echo 错误: 物理引擎编译失败 goto :error ) :: 检查编译输出是否存在 if not exist "%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. echo ---------------------------------------- echo 第2步: 拷贝 WASM 文件 echo ---------------------------------------- echo. :: 拷贝 WASM 文件到客户端资源目录 echo 拷贝: %WASM_SOURCE% echo 到: %WASM_OUTPUT% copy "%WASM_SOURCE%" "%WASM_OUTPUT%" >nul if %errorlevel% neq 0 ( echo 错误: 拷贝 WASM 文件失败 goto :error ) echo 拷贝成功! echo. echo ---------------------------------------- echo 第3步: 生成 asm.js 文件 echo ---------------------------------------- echo. :: 检查 Emscripten 转换工具是否存在 if not exist "%EMSCRIPTEN_TOOL%" ( 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%" echo. call "%EMSCRIPTEN_TOOL%" "%WASM_SOURCE%" "%ASM_OUTPUT%" if %errorlevel% neq 0 ( echo 错误: asm.js 转换失败 goto :error ) echo. echo ======================================== echo 构建完成! echo ======================================== echo. echo 输出文件: echo WASM: %WASM_OUTPUT% if exist "%ASM_OUTPUT%" ( for %%A in ("%WASM_OUTPUT%") do ( set wasm_size=%%~zA set /a wasm_kb=!wasm_size!/1024 ) for %%A in ("%ASM_OUTPUT%") do ( set asm_size=%%~zA set /a asm_kb=!asm_size!/1024 ) echo asm.js: %ASM_OUTPUT% echo. echo 文件大小: echo WASM: !wasm_kb! KB echo asm.js: !asm_kb! KB ) echo. echo 构建模式: %BUILD_MODE% echo 可以在 Cocos Creator 中使用这些文件了! goto :end :error echo. echo ======================================== echo 构建失败! echo ======================================== exit /b 1 :end echo. pause