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

如何处理与 LibGDX 中的变形渲染器的冲突

易自珍
2023-03-14

我正在尝试使用LibGDX为Android制作一个小游戏,并且很难进行碰撞检测。所以,我有两个形状:第一个是矩形(播放器):

shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(Color.BLACK);
shapeRenderer.rect(position.x, position.y, width, height);
shapeRenderer.end();

第二种是下面的笼子:

shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(Color.BLACK);
shapeRenderer.rect(0, 0, 50, Gdx.graphics.getHeight());
shapeRenderer.rect(0, 0, Gdx.graphics.getWidth(), 50);
shapeRenderer.rect(Gdx.graphics.getWidth()-50, 0, 50, Gdx.graphics.getHeight());
shapeRenderer.rect(0, Gdx.graphics.getHeight()-50, Gdx.graphics.getWidth(), 50);
shapeRenderer.end();

我的问题是:

如何检测这两个物体之间的碰撞?我知道的,如何检测冲突的唯一方法是使用Recectgle类中的相交方法,但我想制作比矩形更复杂的形状。

谢谢你的帮助!

共有1个答案

萧鸿轩
2023-03-14

根据文档ShapeRenderer效率不高,不应大量使用。

呈现点、线、矩形、填充矩形和框。此类不适用于对性能敏感的应用程序,而是更面向调试。

更好的方法可能是分配具有小白色纹理的 Sprite,并将其放大到适当的大小。使用设置颜色(..)方法设置色调和阿尔法。

对于碰撞getBoundingRectangle()的Sprite返回边界轴对齐Rectangle,这将有助于您在碰撞中。

你可以使用位图手工创建一个纹理。

public static Texture createBgTexture() {
    Pixmap pixmap = new Pixmap(1, 1, Format.RGBA8888);
    pixmap.setColor(Color.WHITE);
    pixmap.fill();
    Texture texture = new Texture(pixmap); // must be manually disposed
    pixmap.dispose();

    return texture;
}

对于更复杂的形状,请使用物理身体编辑器,它将以可读文件格式返回形状的顶点,使用该点并创建多边形。

Libgdx具有< code>Intersector类,包含许多静态碰撞检测方法,如< code>intersectPolygons(....)等等。

另一方面,如果你想要一个真实的碰撞检测,你可以在游戏中使用box2d。在box2d API中,有一个ContactListener接口,它会在两个实体碰撞时告诉您。

 类似资料:
  • 我正在重温LibGDX游戏编程,不幸的是,我不得不重新学习我以前知道的东西。 我目前正在使用平铺地图编辑器制作一个非常简单的大金刚风格关卡。我总共有大约20个矩形。 我在我的主要游戏屏幕类中创建了一个box2d世界,并有一个for循环来将矩形对象放入世界和调试器。 我的问题是,只有我绘制的底部(和第一个)矩形出现。我已经检查了比例,还放了一个println(),它告诉我已经解析了对象信息,所有的矩

  • 我是libGDX的新手,据我所知,Intersector类有矩形/矩形、圆/圆、圆/矩形和多边形/多边形的重叠方法,但由于某种原因,它似乎没有任何检查多边形/矩形或多边形/圆的方法。 有没有推荐的方法来检查多边形和矩形/圆之间的冲突? 另外,为什么这被排除在跨部门类之外,有什么原因吗?(即,我应该避免它吗?如果是这样,推荐的替代方案是什么?

  • 问题内容: 我有一个使用FitViewport的尺寸为800x480的游戏世界,最初使用像素来渲染box2d物体+固定装置,因此所有物理效果看起来都是漂浮而缓慢的。通过查看文档,我发现box2d使用度量单位,因此我将box2d的位置和大小转换为32倍,因此最终得到了25x15米的box2d世界。 我遇到的问题是,现在box2d对象变得非常小。如何缩小它们,使它们在屏幕上显示常规尺寸? 问题答案:

  • 我使用的是ATOM,我试图在代码中改变字体家族,但有些东西没有改变。 首先我这样做:href=“https://fonts.googleapis.com/css?family=roboto&display=swap”rel=“stylesheet”type=“text/css”

  • 问题内容: 我有一个应用程序,该应用程序具有一组具有递归关系的数据(使用递归的树状视图。)我尝试了几种通过Angular实现此关系的方法,但似乎都没有一种可行的结果。 这里的想法是,我希望使用一组嵌套列表来呈现此数据,以允许许多(7+)深度级别。为了简化操作(我的实际应用程序使用Restangular),我构建了以下插件: http://plnkr.co/edit/dKT9OvpsMgnxmLwg

  • 使用C语言开发引擎,并根据Cherno的视频系列实现了一个批处理渲染器。这似乎在一段时间内运行良好。最近注意到,在参与该项目的两台计算机中的一台上,精灵的一个纹理奇怪地渗入了另一个纹理。 经过一点研究,我们注意到具体来说,出血是根据它们的渲染顺序发生的。第一个渲染的精灵没有问题,后面的精灵大多是正确的,一小部分像素来自最后绘制的精灵的纹理。 我们认为这个问题与着色器有关,但也有可能是批处理渲染器有