ゲームでは、プールされたスプライトのうちのどれが使用中であるかを確認する必要があります。一度に複数のスプライトを「アクティブ」にすると、両方とも不変のHashSetであるpassivePool
からactivePool
に転送したいと思います(大丈夫、毎回新しいセットを作成します)。だから私の基本的な考え方は、の線に沿ってにある:ScalaのインスタンスをSetから別のものに移動
activePool ++= passivePool.take(5)
passivePool = passivePool.drop(5)
が、私は私が取る5 5が、私はそれからドロップすることを異なる可能性があります推測しているScalaのドキュメントを読みます。それは間違いなく私が望むものではありません。また、私は何かを言うことができます:
val moved = passivePool.take(5)
activePool ++= moved
passivePool --= moved
をしかし、これは私が制限されたデバイス(Android携帯電話)にほとんどリアルタイムでフレームごとに行う必要がある何かであるように私は私が検索する必要があります、これはかなり遅いだろうと思いますpassivePool
からのmoved
スプライトのそれぞれ1つずつ。
賢い解決策はありますか?あるいは、私は何か基本的なものを逃していますかここでの効率は第一に考慮する必要があります。また、スプライトがゲーム内で破壊されたときにアクティブプールからスプライトをランダムに削除する必要があるため、セットの代わりにリストを使用することはできません。
1.なぜ、最初のバージョンが2番目のバージョンより効率的だと思いますか? 2.あなたの問題に変更可能なマップを使用することをお勧めします。これはただの感覚です。 – ziggystar