2016-06-17 9 views
0

フェイザーはスプライトを可視に設定してもfalseに設定されていますか?Phaserは、スプライトを表示可能にしてfalseに設定しますか?

私は、Motherloadと同じようにゲームを作っていますが、無限の地形です。地形は64x64サイズのスプライト(タイル)で構成されています。スプライトがたくさん並んでいることが想像できるように、シーンに追加されます。視界から外れるスプライトは可視プロパティがfalseに設定されていますが、フレームレート(FPS)はプレーヤーが進むにつれて大きく低下し、地形が多く生成されます。スクリーン上のスプライトだけがvisibleプロパティをtrueに設定しているのはなぜですか?私は何度も何度もチェックしていますが、画面上のスプライトだけが可視プロパティがtrueに設定されていて、私のFPSがそれほど下がらない理由を理解できません。

+2

可視性をfalseに設定しても、古い地形はメモリに残り、パフォーマンス上の問題が発生すると思います。シーンを埋めるのに十分な地形スプライトのプールを実装できますか?それらを通る単純なループは、スプライトが場面から外れているときにプールに戻って必要な場面に置かれますか?人が弾丸プールで行う方法と同様です。次に、ゲームのループ中に要素を作成しないでください。 – ste2425

+0

@ ste2425タイルが見えなくなってメモリに保存されるとタイルを取り除かなければならないのですか?私は、可視性がfalseに設定されている(レンダリングすべきではありませんか?)、更新されていないか、または物理チェックを行っているので、なぜこのパフォーマンスの影響を引き起こすのか理解できません。私は、ChromeのJavascriptプロファイラを使用してFPSを落としていたものを確認しました。これは、このドロップを引き起こすレンダリングループです。なぜなら、オフスクリーンであっても、 –

+0

明らかにsprite.kill()はそのスプライトのレンダリングを停止していますが、これをショットしてパフォーマンスに役立つかどうかを確認します。 –

答えて

1

新しいスプライトを常に作成してから.kill()を作成する代わりに、スプライトをリサイクルする必要があります。ここ

ここで使用する手順だ

(粒子発生器は、無限のために実行されている場合、それは粒子のみの有限数を作成するように)これは、パーティクルエフェクトで使用したのと同じ手法だRecycling.

上の例です:

  1. 、初期シーン(位置、画像をレンダリングPhaser.Group
  2. で(おそらくあなたの画面のサイズを2倍)スプライトの数を作成します。 )スプライトごとに
  3. スプライトがオフスクリーンに移動すると(sprite.inCameraを使用してupdateをチェックイン)、.kill()です。
  4. 新しいスプライトを画面に描画するときは、getFirstExists(false)を使用して、が表示されない再利用スプライトを取得してください。
  5. 更新スプライトの画像と位置
  6. .revive()

出来上がりを使用してスプライトを描画するためにゲームを教えて!パフォーマンスが大幅に向上します。 (特にスプライト1000を作成しようとしていた場合)

関連する問題