1

状態に切り替えた後、状態aにプリロードされた画像/スプライトを追加したいと思います(はのインスタンスです)。phaserGameInstance.worldbphaserGameInstancePhaser.Game

すべてのアセットはブラウザーのキャッシュにグローバルに保存されているためphaserGameInstance.cache、すべての状態で利用できるはずですが、実際にはそうではありません。

これに対して私が見つけた回避策は、状態のキャッシュオブジェクトを状態bのキャッシュオブジェクトのプロパティで拡張することですa。これはちょっと邪魔で、おそらく意図した方法ではありません。

var priorCache = phaserGameInstance.state.getCurrentState().cache; // State 'a'

phaserGameInstance.state.start('b'); // Switch to state 'b'

jQuery.extend( // Merges the cache of state 'a' recursively
  true,        // into the cache of the current state 'b'
  phaserGameInstance.state.getCurrentState().cache,
  priorCache
);

state のアセットをプリロードするときにこれが機能するかどうかはテストしていませんb(マージ プロセスによって state のプロパティが上書きされる可能性がありますb) a

プリロードされたアセットを状態に関係なく使用するにはどうすればよいですか?

4

1 に答える 1

0

を呼び出しても、状態が からにphaserGameInstance.state.start('b')実際に切り替わるわけではありません。切り替え先の保留中の状態として状態を割り当てるだけです。つまり、どういうわけか非同期メソッドです。abb

phaserGameInstance.world呼び出しの直後にオブジェクトを追加すると、状態がまだ保留中phaserGameInstance.state.start('b')にオブジェクトが状態に追加され、次のゲームの更新でアクティブになります。状態がシャットダウンするとすべてのオブジェクトが削除されるため、更新が発生した後は空になります。したがって、キャッシュなどをマージする必要はありません。abphaserGameInstance.worlda

解決策は次のとおりです。

phaserGameInstance.state.add(
  'b',
  {
    create: function () { // Add the assets loaded in state 'a' here ...
        phaserGameInstance.add.image(0, 0, 'myImage');
      }
  }
);

phaserGameInstante.state.start('b');

// ... not here! State 'a' is still active in this line.

オブジェクトが状態に追加されたため、aプリロードされた状態に依存しているように見えましたが、実際には私の質問で想定されているように状態に依存しません。

于 2014-08-21T15:49:37.207 に答える