当前位置: 首页 > 知识库问答 >
问题:

Box2d/Libgdx与主体共享对象

范安歌
2023-03-14

我正在制作一个塔防游戏,因为我希望制作很多投射物,所以我想我会把它们放在一起。然而,我的投射物有用于碰撞检测的身体场和固定装置,当我对投射物调用free()时,它们的身体仍然存在。

所以我试图用世界毁灭尸体。destroyBody(),但这会导致空指针错误,除非我在外部显式执行。通过像我在这里学到的那样标记我的对象。但是,当我尝试实现这种方法来摧毁尸体时,出现了一些错误,因为被摧毁的尸体与释放弹丸的时间不匹配。

使用可池对象和实体管理内存的最佳方式是什么?

共有1个答案

万俟皓
2023-03-14

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

@Override
public void reset(){
    body.setTransform(new Vector2(-50,-50), 0);
    body.setLinearVelocity(0, 0);
    body.setActive(false);
}
 类似资料:
  • 平铺贴图对象以像素表示x、y位置,以度表示旋转。 我正在从地图上加载坐标和旋转,并试图将它们指定给box2d实体。位置模型之间存在一些差异,例如平铺对象旋转以度为单位,而box2d躯干角度以弧度为单位。 如何将位置转换为BodyDef坐标x、y和角度,以便在正确的位置创建实体? 使用代码: 当旋转为0时工作,但当旋转不同于0时,主体定位不正确。 我在这里找到了一些提示: http://www.tu

  • 我正在使用ContactListener测试box 2D中两个物体之间的碰撞 这是我在世界上使用的所有contactListener类。设置ContactListener(new Box2DWorld(this))以添加它 我的dedub是这样的 beginContact preSolve postSolve。preSolve postSolve beginContact preSolve END

  • 正如你从图像中看到的那样,身体与实际的精灵不同,我有一种预感,它可能是起源,因为它的区别很小,但我似乎不知道如何把它排成一行。 我的创建方法 我的渲染方法

  • 我正在尝试使用LibGDX来掌握游戏开发的窍门,到目前为止,我已经理解了它的一切,因为它是基本的Java,并且很好地使用了接口和超级类。 我正在努力将图形融入到LibGDX项目中,我正在使用Tiled创建地图,我了解它的工作原理以及如何渲染它们。 我也开始进入Box2D学习物理,我能够包装我的地图(平铺的…)用Box2D。 当我尝试从Spine导入项目时,出现了问题,我访问了以下链接:https:

  • 我想创造一个像飞鸟一样的游戏。我想让玩家在屏幕上不断跳跃。我创造了这个代码,它不像一只扑翼鸟跳 代码: 问题是当用户在屏幕上快速点击时,玩家就像火箭一样被击中。当玩家跌倒时,跳跃更低。我该如何解决这个问题,并获得相同的跳跃强度? 我的解决方案:

  • 我就开门见山了。所以我在做这个游戏,你应该用你的咒语杀死其他物体。我创造了子弹和它们的身体。我们都很好。它正在工作。但我想让它看起来特别和“神奇”,所以我决定使用粒子。我制作了粒子,把它们放在子弹体后面,用下面的代码: 但当我发射多发子弹时,问题是粒子刚刚从我发射的所有第一发子弹中消失,并且只出现在最后一发子弹上。有人能给我介绍一下这个吗? -----------------编辑---------