java - Box2d/Libgdx 使用主体池化对象

标签 java libgdx box2d

我正在创建一个塔防游戏,因为我预计会制作很多射弹,所以我想我会把它们集中起来。但是,我的射弹具有用于碰撞检测的 Body 场和 Fixtures,当我对射弹调用 free() 时,它们的 body 仍保留在世界中。

因此,我尝试使用 world.destroyBody() 销毁 body ,但这会导致空指针错误,除非我通过标记我的对象 like I learned here. 在 world.step 之外显式执行此操作。但是当我尝试实现那个方法来摧毁尸体时,出现了错误,因为被摧毁的尸体与释放射弹的时间不匹配。

使用 Poolable 对象和 Bodies 管理内存的最佳方法是什么?

最佳答案

您可以通过覆盖可池对象的重置方法将它们存储在远离屏幕的地方,而不是删除实体并重新创建它们。

@Override
public void reset(){
    body.setTransform(new Vector2(-50,-50), 0);
    body.setLinearVelocity(0, 0);
    body.setActive(false);
}

关于java - Box2d/Libgdx 使用主体池化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45228219/

相关文章:

java - 如何在Box2D中获取Body的扭矩大小?

c++ - Shape.SetAsBox() 中的断言失败?

java - 构建计步器时 onAccuracyChanged 方法有什么意义?

java - 安全:filter-chain pattern match url have symbol '?'

java - libgdx,java - 尝试从另一个类调用 .render()

java - Libgdx 表组件未正确显示

java - 使用多个dex文件时是否需要将同一个包的类保存在同一个dex中

java - 如何在 Spring WebServiceTemplate 中设置超时

python - 尽管出现以下错误,我如何安装gym[box2d]?

c++ - 访问类实例的属性