在libGDX中使用Pool <>类

Ama*_*man 4 java libgdx

如何以及为什么在libGDX中使用Pool?官方开发指南中没有关于此类的内容,除非在某些示例中使用它.

P.T*_*.T. 7

类是为了避免垃圾收集开销的优化.缺点是必须手动管理池中的对象(您必须记住释放它们以便可以重用它们),并且您的对象必须是可重用的(final例如,通常没有字段).

在libGDX中,Pool该类用于否则将在每个帧上分配的对象(如Actions和Events).

您可以忽略池中的代码,直到遇到生成过多垃圾的问题.

如何使用池

A Pool<>管理单一类型的对象,因此它按该类型进行参数化.Pool通过调用从特定实例中获取对象obtain,然后通过调用将其返回到池中free.池中的对象可以选择实现Pool.Poolable接口(只需要一个reset()方法),在这种情况下,Pool它们会在返回池时自动重置对象.对象最初是按需分配的(因此,如果您从不调用obtain,则Pool将不包含任何对象).

您必须实现自己的子类,Pool<>因为该newObject方法是抽象的.

游泳池警告

注意泄漏对Pooled对象的引用.仅仅因为你在Pool上调用"free"并不会使任何未完成的引用无效.如果你不小心,这可能会导致细微的错误.如果在将对象放入池中时未完全重置对象的状态,则还可以创建细微的错误.

  • 要实现它们,请查看libgdx附带的演示代码,或者libgdx本身.我知道非常愤怒的机器人使用池这一事实,舞台类也是如此.你没有_need_ pool,但是,正如PT所说,如果你在每个帧上分配对象,你可能想要考虑它们. (2认同)