我有一个单元类和它的一些子类(Archer,Swordsman等)。 如何创建一个池来回收所有类型单元的子类?
答案 0 :(得分:2)
这是不可能的,因为Pool
只能包含一种特定类型的对象。否则你可能会有这样的事情:
Pool<Unit> unitPool = ...;
Archer acher = new Archer();
unitPool.free(archer); // we free an Archer, who is a Unit
Unit swordsmanUnit = unitPool.obtain(); // we can obtain only Units
Swordsman swordsman = (Swordsman) swordsmanUnit; // This is actually an Archer and will result in a ClassCastException
幸运的是,libgdx附带了一个名为Pools
的实用程序,可以轻松汇集许多不同的类。它为每个类创建一个ReflectionPool
,并从正确的池中释放/获取对象。只需制作Unit
班Poolable
。
Archer archer = Pools.obtain(Archer.class);
Swordsman swordsman = Pools.obtain(Swordsman.class);
// ...
Pools.free(archer);
Pools.free(swordsman);