使用Pool<> libGDX中的类

时间:2013-02-15 04:29:30

标签: java libgdx

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

1 个答案:

答案 0 :(得分:7)

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

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

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

如何使用游泳池

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

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

游泳池警告

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