次の方法で共有


チャンクの動的な順序変更

タイトルのインストールが開始すると、インストール システムでは定義された既定の順序に従って、チャンク (グループとしてインストールされるファイルのコレクション) を取得してコピーします。 タイトルを実行するために必要なチャンクがインストールされた後の、残りのチャンクのインストール順序をタイトルでカスタマイズできます。このカスタマイズにより、既定のインストール順序に戻るまでその順序でインストール システムで処理されます。

これによって、タイトルではさまざまな状況やユーザーからの各種入力に応じてコンテンツの取得順序を制御できます。 動的な順序変更により、ユーザーがコンテンツのインストールを待機する時間を最小化でき、さらに、最初に使用可能にするものをユーザーが選択できるようになります。

インストール順序を変更した後で、ゲームプレイまたはタイトルが使用するためチャンクが必要な場合は、「ストリーミング インストール: 状態」で説明されているいずれかのメソッドを使用してインストールの状態を監視できます。

チャンクのインストール順序を変更する方法

次に示すコード例では、ユーザーがプレイを続行できるように、ゲームがファイルにすぐにアクセスできる必要があります。 PrioritizeChunk 関数が定義されており、チャンクの現在のインストール状態をチェックします。

  • チャンクがまだインストールされていない場合、関数はまずそのチャンクをインストールするようにストリーミング システムに要求し、チャンクの進行状況のインストール モニターを返します。

  • チャンクが既にインストールされている場合、関数は null モニターを返します。

template<> 
struct std::default_delete<XPackageInstallationMonitorHandle> { 
    typedef XPackageInstallationMonitorHandle pointer; 
    void operator()(XPackageInstallationMonitorHandle handle) const noexcept  
    {   
        XPackageCloseInstallationMonitorHandle(handle);  
    } 
}; 
 
HRESULT PrioritizeChunk(uint32_t chunkId, XPackageInstallationMonitorHandle* monitor) 
{ 
    char id[PACKAGE_IDENTIFIER_MAX_LENGTH]; 
 
    *monitor = nullptr; 
    RETURN_IF_FAILED(XPackageGetCurrentProcessPackageIdentifier(_countof(id), id)); 
 
    XPackageChunkSelector selector; 
    selector.type = XPackageChunkSelectorType::Chunk; 
    selector.chunk = chunkId; 
 
    XPackageInstallationMonitorHandle temp; 
    RETURN_IF_FAILED(XPackageCreateInstallationMonitor(id, 1, &selector, 1000, queue, &temp)); 
    std::unique_ptr<XPackageInstallationMonitorHandle> localMonitor(temp); 
 
    XPackageInstallationProgress progress; 
    XPackageGetInstallationProgress(localMonitor.get(), &progress); 
 
    if (!progress.completed) 
    { 
        RETURN_IF_FAILED(XPackageChangeChunkInstallOrder(id, 1, &selector)); 
        *monitor = localMonitor.release(); 
    } 
 
    return S_OK; 
}