LibGdx对象池,用于同一父类的许多对象

dra*_*ziw 7 java android pool object libgdx

在我的游戏中,子弹不断创建,因此我想为此使用Pool类.然而,问题是我有很多类型的子弹.所有这些都扩展了相同的父类Projectile.目前有19种子弹.Pool为每个人创建一个类是个坏主意.还有更多可能会来.

我试图施展BallistaArrow arrow = (BallistaArrow) world.getPool().obtain();.但是我得到了施放异常:

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

BallistaArrow是Projectile的儿童类.

有没有办法解决这个问题,所以我可以Pool为所有Projectile扩展对象都有一个类?

P.T*_*.T. 3

该池包含特定类型的实例。假设其中有 10 个对象,这些将是 10 个特定实例,从池中提取对象Projectile您无法决定该对象是什么类型。

至少有两种方法可以解决这个问题:

  1. 使用多个池,每种子弹类型一个。您可以在池周围放置一个包装器,该包装器根据类型参数知道要使用哪一个。这可能不是一个糟糕的解决方案。空池没什么大不了的。如果某种类型的射弹使用了一段时间然后不再使用(其池仍然是满的),您可能会遇到保留问题。
  2. 让您的Projectile子类型成为运行时特化,而不是子类。因此,您只需一个Projectile类来存储所有项目符号共有的内容,并找出运行时的行为差异。请参阅在 Libgdx 中使用对象池