java - Libgdx如何存储碰撞检测数据

标签 java garbage-collection libgdx collision-detection

我正在使用 libgdx scene2d 开发游戏。我的所有对象都是 Actor 的子类(我们称之为 GameObject),因此它们都已经有了位置和大小,但都在单独的字段中(float x; float y ; float 高度; float 宽度;)。对于碰撞检测,我使用了一些自制的方法,但也使用了 Intersector 的一些方法。 Intersector 方法需要 Vector2 参数来表示位置和大小。因此,我必须在每个渲染周期中从Actor字段中创建Vector2对象。这不利于垃圾收集。我避免这种情况的唯一想法是在我的 GameObject 中设置 Vector2 位置和 Vector2 大小。但随后我有多余的数据,我需要重写 getter 和 setter 方法来更新 Vector2 和 Actor 的数据(绘图所需)。还有其他更好的方法吗?冗余数据比垃圾问题更好吗?或者我应该复制 Intersector 的方法并编辑它们以使用 float x 和 float y 而不是 Vector2 吗?

最佳答案

LibGdx 有一个很好的 Pools 类,那么为什么不使用它呢?

这是一个例子:

Vector2 position = Pools.obtain(Vector2.class);
// use your Vector2 for something
Pools.free(position);

您不会有任何冗余数据,它仍然比在每个帧上分配不必要的对象更快且更可预测。


我的 2 美分:

我同意过早优化是一个坏主意,但根据我的经验,在制作某些类型的应用程序时采用某些设计方法是有益的。

具体来说,我认为在制作游戏时避免在每个帧上进行不必要的对象分配是一个好主意,特别是对于 Android 等平台。

这些分配现在可能不是问题,或者对于某些特定设备来说,但它可能会回来咬你的屁股,你可能被迫对你的代码进行一些重要的更改 - 这种情况已经发生过我。

关于java - Libgdx如何存储碰撞检测数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21378206/

相关文章:

python - 从列表中删除元素后释放内存

gradle - 使用 Kotlin Sync 配置 Clean LibGDX 项目失败,类型代码无效 :82

java - XML 节点替换失败

java - 有用的 Java 注释

google-chrome - TweenMax 和 TweenLite 的区别?

java - Libgdx 实体重力

java - LibGDX sprite 批处理字体坏比例渲染

java - Android应用程序不显示解析的Jsoup信息

java - 在 @PathVariable 和 @RequestParam 中使参数可选

memory-management - OCaml 是否曾经复制过自定义 block ?