4

多くのファイル (ゲーム) を含むプロジェクトに取り組んでいます。これらのファイルは、アーティストなどによって VS 2013 の外部から変更される可能性があります。ファイルはサブディレクトリにあり、ゲームはそこにあると想定しています。たとえば、images/items/block.png

ビルド後のイベントを使用してみました

xcopy /C /Y /I /R /S /Q "$(SolutionDir)game_data\*" "$(TargetDir)"

また、$(LayoutDir) を使用します。私たちのデスクトップ (Windows RT ストア) プロジェクトでは問題は発生しません。これは、ファイルをビルドの AppX ディレクトリにコピーするだけで、実行時に exe がそれらを検出するためです。しかし、Windows Phone では AppX ディレクトリはなくなり、電話にコピーされません。

$(SolutionDir)game_data のファイルとディレクトリを電話にインストールされるパッケージに含めるにはどうすればよいですか?

できれば私が:

  • プロジェクトフィルターでサブフォルダー構造全体を再作成する必要はありません
  • 各サブディレクトリ内の各ファイルのプロパティで「Content=Yes」を指定する必要はありません。
  • アーティストによってディレクトリに追加された新しいファイルを追加または削除する必要はありません。
4

3 に答える 3

3

ファイルが Appx パッケージに含まれるように、早い段階でファイルをコピーする必要があります。デスクトップ上のビルド後に Appx ディレクトリにコピーするソリューションは、完全な展開を行うのではなく、アプリを独自のフォルダーから直接実行するビルド マシンに限定されます。ファイルは展開パッケージに含まれていないため、他のシステムでは使用できません。これは、アプリを実行する前に常に展開する必要があるため、電話ではより明白ですが、最終的には同じことです.

手動の方法は、Visual Studio プロジェクトにファイルを含めることです。ファイルをプロジェクト ディレクトリにコピーし、すべてのファイルを表示してから、新しいファイルを選択して含めることができます。それらが Content として自動的に追加されない場合 (例の png のようなほとんどの画像タイプは追加されます)、ビルド時に appxpackage に含まれるように明示的に設定する必要があります。

これは、あなたが望んでいないと言ったシナリオのほとんどです。

代わりに、プロジェクト ファイルへのアイテムの追加を自動化できます。vcxproj ファイルは XML ファイル (スキームはこちら) であり、スクリプトを記述してアセット ファイルをプロジェクトのItemGroupsに追加し、DeploymentContent としてフラグを立てることができます。

<ItemGroup>
    <Image Include="images\items\block.png" />
    <None Include="Assets\frotz.foo">
        <DeploymentContent>true</DeploymentContent>
    </None>
    <None Include="Assets\wibble.foo">
        <DeploymentContent>true</DeploymentContent>
    </None>
</ItemGroup>

最後に、Visual Studio に任せるのではなく、makeappx.exe を使用して自分で appxpackage を作成することもできます。これにより、パッケージ内のファイルを完全に制御でき、VS プロジェクトの外部からファイルを取り込むことができます。アプリ パッケージと展開およびアプリ パッケージ (MakeAppx.exe)のドキュメントを参照してください。

于 2015-02-20T00:18:26.120 に答える
2

これを解決する方法は次のようになります。

  • 次のように、ディレクトリ構造全体の名前を変更するツールを作成します。

    script/game/level.luaになるscript#game#level.lua

  • 次に、すべてのファイル (現在はルート ディレクトリにあります) をプロジェクトに追加し、それらのプロパティを Content=Yes に設定します。

  • 「/」を「#」に置き換えて、ゲーム内のパスを変更します。すべての fopen 呼び出しをプラットフォーム固有の実装に中継したことを願っています (私たちのように)。

新しいファイルを追加するスクリプトを作成することもできますが、今のところ、新しいファイルを追加する SVN の更新後に毎回実行するのは簡単です。

于 2015-02-21T15:18:17.010 に答える
1

私が AppX をアンパック/パックするために使用するバッチ ファイルに興味がある人は、次のとおりです。

@echo off

@REM ==================================
@REM User variables
@REM ==================================
set GAME_DIR=C:\development\MyAwesomeGame
set GAME_VERSION=1.0.0.0
set PVK_PUBLISHER=SECRETSECRETSECRETSECRETSECRET
@REM Uncomment for beta builds:
@REM set APPX_BUILD=_Beta
@REM Uncomment for debug builds:
@REM set APPX_BUILD=_Debug

set RESOURCETOOL_FLAVOR=compile_for_winrt
set GAME_NAME=Game.WindowsPhone
set GAME_TOOLS_DIR=%GAME_DIR%\tools
set GAME_DATA_DIR=%GAME_DIR%\data
set PFX_FILE=%GAME_DIR%\proj.win8.1\%GAME_NAME%_StoreKey.pfx
set RESOURCETOOL_OUTPUT=%GAME_DIR%\processed_game_data\win8.1
set MY_START_DIR=%cd%

@REM ==================================
@REM Tools
@REM ==================================
set WIN_SDK_BIN_DIR=C:\Program Files (x86)\Windows Kits\8.0\bin\x64
if not exist "%WIN_SDK_BIN_DIR%" set WIN_SDK_BIN_DIR=C:\Program Files\Windows Kits\8.0\bin\x86
set WINRAR_EXE=%GAME_TOOLS_DIR%\WinRAR.exe
set MAKECERT_EXE=%WIN_SDK_BIN_DIR%\makecert.exe
set MAKEAPPX_EXE=%WIN_SDK_BIN_DIR%\makeappx.exe
set SIGNTOOL_EXE=%WIN_SDK_BIN_DIR%\signtool.exe
set POWERSHELL_EXE=%SYSTEMROOT%\system32\WindowsPowerShell\v1.0\powershell.exe
set PVK_FILE=None
set CER_FILE=None

@REM ==================================
@REM Prerequisites check
@REM ==================================
if not exist "%MAKECERT_EXE%" goto err_no_MAKECERT_EXE
if not exist "%MAKEAPPX_EXE%" goto err_no_MAKEAPPX_EXE
if not exist "%SIGNTOOL_EXE%" goto err_no_SIGNTOOL_EXE
if not exist "%WINRAR_EXE%" goto err_no_WINRAR_EXE
if not exist "%POWERSHELL_EXE%" goto err_no_POWERSHELL_EXE

@REM ==================================
@REM Build options
@REM ==================================
set do_verbose=n
set do_all=y
set build_arm_platform=y
set build_win32_platform=y
set do_delete_tmp_dir=y
set do_copy_resources=y
set do_unpack_source_appx=y
set do_create_appx=y
set do_sign_appx=y
set do_install_appx=y
set do_create_rar=y

set /p do_all=Complete process? (default on) [y/n]: 
if not "%do_all%"=="n" goto skip_do_all
set /p build_arm_platform=Build ARM? (default on) [y/n]: 
set /p build_win32_platform=Build Win32? (default on) [y/n]: 
set /p do_verbose=Verbose output? (default off) [y/n]: 
set /p do_delete_tmp_dir=Delete TMP dir? (default on [y/n]): 
set /p do_copy_resources=Copy resources? (default on [y/n]): 
set /p do_unpack_source_appx=Unpack AppX? (default on) [y/n]: 
set /p do_create_appx=Create AppX? (default on) [y/n]: 
set /p do_sign_appx=Sign AppX? (default on) [y/n]: 
set /p do_install_appx=Install AppX? (default off) [y/n]: 
set /p do_create_rar=Create Rar? (default on) [y/n]: 
:skip_do_all

@REM ==================================
@REM Build verbosity settings
@REM ==================================
set XCOPY_VERBOSE=/q
if not "%do_verbose%"=="y" goto :skip_do_verbose
@echo on
set MAKEAPPX_VERBOSE=/v
set XCOPY_VERBOSE=
:skip_do_verbose

@REM ==================================
@REM Select current platform
@REM ==================================

if "%build_arm_platform%"=="n" goto end_arm_build
set WIN8_PLATFORM=ARM
goto run_appx_build
:end_arm_build

if "%build_win32_platform%"=="n" goto end_win32_build
set WIN8_PLATFORM=Win32
goto run_appx_build
:end_win32_build

cd "%MY_START_DIR%"

@echo ######## Done. ########
goto end

@REM ==================================
@REM Start platform dependent build here
@REM ==================================
:run_appx_build

@REM ==================================
@REM Platform AppX variables
@REM ==================================
set APPX_NAME=%GAME_NAME%_%GAME_VERSION%_%WIN8_PLATFORM%%APPX_BUILD%
set APPX_DIR=%GAME_DIR%\AppPackages\%GAME_NAME%\%APPX_NAME%_Test
set APPX_SOURCE_PATH=%APPX_DIR%\%APPX_NAME%.appx
set APPX_TEMP_DIR=%APPX_DIR%\_TMP_TMP_TMP_

@REM ==================================
@REM Remove temp dir
@REM ==================================
if "%do_unpack_source_appx%"=="n" if "%do_copy_resources%"=="n" if "%do_create_appx%"=="n" goto skip_temp_dir
if "%do_delete_tmp_dir%"=="n" goto skip_delete_temp_dir
@echo ######## Removing temporary directory ########
if exist "%APPX_TEMP_DIR%" call rmdir /S /Q "%APPX_TEMP_DIR%"
if exist "%APPX_TEMP_DIR%" goto err_APPX_TEMP_EXISTS
:skip_delete_temp_dir
mkdir "%APPX_TEMP_DIR%"
cd "%APPX_TEMP_DIR%"
:skip_temp_dir

@REM ==================================
@REM Unpack source AppX
@REM ==================================
if "%do_unpack_source_appx%"=="n" goto skip_unpack_source_appx
if not exist "%APPX_SOURCE_PATH%" goto err_no_APPX_SOURCE_PATH
@echo ######## Unpacking source AppX ########
"%WINRAR_EXE%" x "%APPX_SOURCE_PATH%"
:skip_unpack_source_appx

@REM ==================================
@REM Copy game resources
@REM ==================================
if "%do_copy_resources%"=="n" goto skip_copy_resources
if not exist "%RESOURCETOOL_OUTPUT%" goto err_no_RESOURCETOOL_OUTPUT
echo ######## Copying game's resources ########
xcopy /C /Y /I /R /S %XCOPY_VERBOSE% "%RESOURCETOOL_OUTPUT%\*" "%APPX_TEMP_DIR%\*"
xcopy /C /Y /I /R /S %XCOPY_VERBOSE% "%GAME_DATA_DIR%\shaders\*.cso" "%APPX_TEMP_DIR%\shaders"
:skip_copy_resources

@REM ==================================
@REM Create AppX
@REM ==================================
if "%do_create_appx%"=="n" goto skip_create_appx
@echo ######## Packaging new AppX ########
if exist "%APPX_SOURCE_PATH%" del "%APPX_SOURCE_PATH%"
if exist "%APPX_SOURCE_PATH%" goto err_cant_delete_APPX_SOURCE_PATH
call "%MAKEAPPX_EXE%" pack /l /o %MAKEAPPX_VERBOSE% /d "%APPX_TEMP_DIR%" /p "%APPX_SOURCE_PATH%" > NUL
:skip_create_appx

@REM ==================================
@REM Check if AppX creation was succesfull
@REM ==================================
if "%do_create_appx%"=="n" if "%do_sign_appx%"=="n" if not "%do_install_appx%"=="y" goto skip_check_appx_created
if not exist "%APPX_SOURCE_PATH%" goto err_no_APPX_SOURCE_PATH
:skip_check_appx_created

@REM ==================================
@REM Sign AppX
@REM ==================================
if "%do_sign_appx%"=="n" goto skip_sign_appx
@echo ######## Signing AppX file ########
if not exist "%PFX_FILE%" goto err_no_PFX_FILE
"%SIGNTOOL_EXE%" sign /a /v /fd sha256 /f "%PFX_FILE%" "%APPX_SOURCE_PATH%"
:skip_sign_appx

@REM ==================================
@REM Check for install script
@REM ==================================
if not "%do_install_appx%"=="y" if "%do_create_rar%"=="n" goto skip_install_script_check
set APPX_INSTALLSCRIPT=%APPX_DIR%\Add-AppDevPackage.ps1
set APPX_CERTIFICATE=%APPX_DIR%\%APPX_NAME%.cer
if not exist "%APPX_INSTALLSCRIPT%" goto err_no_APPX_INSTALLSCRIPT
if not exist "%APPX_CERTIFICATE%" goto err_no_APPX_CERTIFICATE
:skip_install_script_check

@REM ==================================
@REM Install AppX
@REM ==================================
if not "%WIN8_PLATFORM%"=="Win32" goto skip_install_appx
if not "%do_install_appx%"=="y" goto skip_install_appx
@echo ######## Installing AppX file ########
"%POWERSHELL_EXE%" "%APPX_INSTALLSCRIPT%"
:skip_install_appx

@REM ==================================
@REM Create rar to distribute
@REM ==================================
if "%do_create_rar%"=="n" goto skip_create_rar
cd %APPX_DIR%
call "%WINRAR_EXE%" a "%GAME_DIR%\%APPX_NAME%.rar" "Add-AppDevPackage.resources" "Dependencies" "Add-AppDevPackage.ps1" "%APPX_NAME%.appx" "%APPX_NAME%.appxsym" "%APPX_NAME%.cer"
:skip_create_rar

@REM ==================================
@REM Loop other platforms
@REM ==================================
if "%WIN8_PLATFORM%"=="ARM" goto end_arm_build
if "%WIN8_PLATFORM%"=="Win32" goto end_win32_build

@REM =================================
@REM Error messages
@REM ==================================

:err_APPX_TEMP_EXISTS
@echo The temporary directory already exists and cannot be removed:
@echo     %APPX_TEMP_DIR%
goto end

:err_no_MAKECERT_EXE
@echo Missing %MAKECERT_EXE%
goto end

:err_no_MAKEAPPX_EXE
@echo Missing %MAKEAPPX_EXE%
goto end

:err_no_SIGNTOOL_EXE
@echo Missing %SIGNTOOL_EXE%
goto end

:err_no_WINRAR_EXE
@echo Missing %WINRAR_EXE%
goto end

:err_no_POWERSHELL_EXE
@echo Missing %POWERSHELL_EXE%
goto end

:err_no_RESOURCETOOL_OUTPUT
@echo Missing %RESOURCETOOL_OUTPUT%
goto end

:err_no_APPX_SOURCE_PATH
@echo Missing %APPX_SOURCE_PATH%
goto end

:err_no_PFX_FILE
@echo Missing %PFX_FILE%
goto end

:err_no_APPX_INSTALLSCRIPT
@echo Missing %APPX_INSTALLSCRIPT%
goto end

err_no_APPX_CERTIFICATE
@echo Missing %APPX_CERTIFICATE%
goto end

:err_cant_delete_APPX_SOURCE_PATH
@echo Can't delete %APPX_SOURCE_PATH%
goto end

:end
pause
于 2015-02-20T15:42:04.203 に答える