7

Pool私のゲームでは弾丸が常に作成されるため、これにはクラスを使用したいと考えています。ただ、弾の種類が多いのが難点。それらはすべて同じ親クラスを拡張しProjectileます。現在、弾の種類は19種類。Poolそれらのそれぞれにクラスを作成するのは悪い考えです。そして、もっと後で来るかもしれません。

キャストしてみましたBallistaArrow arrow = (BallistaArrow) world.getPool().obtain();。ただし、キャスト例外が発生しています:

[..].mygame.Projectile cannot be cast to [...].mygame.engineer.BallistaArrow.

BallistaArrow は Projectile の子クラスです。

この問題を解決して、すべての拡張オブジェクトPoolに対して 1 つのクラスを使用できるようにする方法はありますか?Projectile

4

1 に答える 1

3

プールには、特定のタイプのインスタンスが含まれています。その中に10個のオブジェクトがあるとします。それらは10個の特定のインスタンスになり、プールからオブジェクトを抽出したProjectile、オブジェクトがどのタイプであるかを判断できません。

これを解決するには、少なくとも次の 2 つの方法があります。

  1. 弾丸の種類ごとに 1 つずつ、複数のプールを使用します。型付きパラメーターに基づいて使用するプールを認識するラッパーをプールに配置できます。これはおそらくそれほど悪い解決策ではありません。空のプールは大したことではありません。一部のクラスの発射物がしばらく使用され、その後使用されない場合、保持の問題が発生する可能性があります (そのプールはまだいっぱいです)。
  2. サブProjectileタイプをサブクラスではなく、実行時の特殊化にします。つまりProjectile、すべての弾丸に共通するものを格納するクラスを作成し、実行時の動作の違いを把握するだけです。Libgdx でのオブジェクト プールの使用を参照してください。
于 2013-11-10T04:57:36.263 に答える