1

以下のコードに問題があります。

CardList.preload = function() 
{
    game.load.text('card_list', '/data/card_list.json');

    var card_list = JSON.parse(game.cache.getText("card_list"));

    // :ISSUE: This code never fires because card_list isn't populated until preload is complete...
    for(var i in card_list)
    {
        game.load.image('hero_card_' + i, 'images/hero_card_' + i + '.jpg');
        game.load.image('hero_tile_' + i, 'images/hero_tile_' + i + '.jpg');
    }

}

基本的に、プレイヤーが所有するカードのリストを (JSON ファイルから) 読み込んでから、画像を事前に読み込もうとしています。問題は、game.load.text() がすぐに起動せず、コールバックがサポートされていないことです。

この問題を解決するための別のアプローチはありますか?

4

1 に答える 1

2

Phaser プリロード関数は、それらのすべての「game.load」呼び出しを実行し、そこからローダー キューを構築することによって機能します。次に、ローダーの実行を開始します。これにより、ロードするファイルの数、残りのファイル数などを認識します。また、プリロード関数自体でロードしようとしているファイルにアクセスできないことも意味します。

2 つの選択肢があります。card_list.json を別の状態 (つまり、ブート状態) でロードしてから、それを解析して、リストされているアセットをプリローダー状態でロードすることができます。Project Templates フォルダの Phaser リポジトリを見ると、これを行うセットアップの例が見つかります。

オプション 2 は、プリロード関数が card_list (およびここで安全にロードできることがわかっているその他のアセット) だけをロードし、ロードされたら、実際のアセットをロードする別のローダーの実行を開始できることです。ここにその例があります: http://examples.phaser.io/_site/view_full.html?d=loader&f=load+events.js&t=load%20events

于 2014-08-25T21:07:12.177 に答える