Spr*_*bua 2 java garbage-collection collision-detection libgdx
我正在使用libgdx scene2d开发游戏.我的所有对象都是Actor(我们称之为GameObject)的子类,所以它们都已经具有位置和大小,但都位于不同的字段中(float x; float y; float height; float width;).对于碰撞检测,我使用一些自制的方法,但也有一些方法Intersector.这些Intersector方法需要Vector2位置参数和因此,我必须在每个渲染周期Vector2的Actors字段中创建对象.这对于垃圾收集是不利的.我唯一想避免这种情况的想法就是拥有一个和我的s.但是我有冗余数据而且我会需要覆盖getter和setter方法来更新和绘制数据(绘图需要).还有另外一种更好的方法吗?冗余数据比垃圾问题好吗?或者我应该复制s方法并编辑它们使用而不是?Vector2 positionVector2 sizeGameObjectVector2ActorIntersectorfloat xfloat yVector2
LibGdx有一个很好的Pools课程,所以你为什么不使用它?
这是一个例子:
Vector2 position = Pools.obtain(Vector2.class);
// use your Vector2 for something
Pools.free(position);
Run Code Online (Sandbox Code Playgroud)
您将没有任何冗余数据,它仍然比在每个帧上不必要地分配对象更快且更可预测.
我的2美分:
我同意过早优化是一个坏主意,但根据我的经验,在制作某些类型的应用程序时采用某些设计方法是有益的.
具体来说,我认为在制作游戏时避免在每个帧上进行不必要的对象分配是个好主意,特别是对于像Android这样的平台.
这些分配现在可能不是问题,或者对于某些特定设备可能不是问题,但是它可能会回来并咬你的屁股,你可能会被迫对你的代码进行一些非平凡的更改 - 这发生在我身上.