Libgdx box2D 中的碰撞对于某些物体失败

2024-01-07

我正在使用 libgdx 和 box2d 开发我的第一个游戏。我正在使用调试渲染器来测试我的对象。我创建了一些类似汽车的物体。每辆车都有一个主体,它是一个6点的大多边形(长约1米,高0.7米),并有2个通过旋转关节连接的车轮。

主车还通过旋转接头连接了一门大炮和一挺机枪。

我面临的问题是汽车的大部分没有按预期发生碰撞。当两辆车相撞时,它们是重叠的,如下所示:

一些注意事项:

  1. 轮子和大炮(较小的形状)碰撞良好。当轮子接触到车身时就会停止
  2. 如果我通过代码检测到碰撞,则碰撞实际上正在发生
  3. 我用一个较小的对象(从机枪发射的子弹)尝试了这个,然后我将对象的“isBullet”属性设置为 true,正如我在另一篇文章中看到的那样(box2d 中的碰撞不正确 https://stackoverflow.com/questions/16458178/not-proper-collision-in-box2d),但结果相同(项目符号用红色圈出):

这是我用来创建主体的代码:

protected Body createBody(Material material, Shape shape, BodyType type, WorldWrapper world)
{
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = type;
    bodyDef.position.set(initialPosition);

    Body body = world.createBody(bodyDef);

    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.density = this.material.getDensity();
    fixtureDef.friction = this.material.getFriction();
    fixtureDef.restitution = this.material.getRestitution();
    fixtureDef.shape = shape;
    body.createFixture(fixtureDef);

    return body;
}

汽车通过车轮旋转关节上的电机前进,结构如下:

public void goForward()
{
    for (RevoluteJoint joint : wheelJoints)
    {
        joint.enableMotor(true);
        joint.setMotorSpeed(-this.engineSpeed);
        joint.setMaxMotorTorque(this.engineTorque);
    }
}

我正在使用以下值:

Density = 2500;
Restitution = 0;
Friction = 0.1;
BodyType = Dynamic;

我使用的是 1/60 秒世界步长,速度迭代 = 6 且位置迭代 = 2

知道我在这里缺少什么吗?


汽车的主体(多边形)是凹形的。 Box2D 在处理凹多边形或顶点按顺时针顺序排列时会遇到问题。 尝试用两个矩形来建造那些汽车,这应该可行。

顺便说一句:您似乎使用旧版本的 libgdx。 当前的libgdx nightlies在polygon.set函数中有一个额外的算法,它自动按给定顶点的逆时针顺序计算凸包。 因此,使用该版本也应该可以解决您的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Libgdx box2D 中的碰撞对于某些物体失败 的相关文章

  • Libgdx 近战攻击碰撞检测

    我有一个带有 3D 模型实例的 3D 场景 我想做碰撞检测 我目前正在关注本教程 http blog xoppa com using the libgdx 3d physicals bullet wrapper part1 http blo
  • Libgdx - 制作下拉菜单/设置屏幕

    我正在寻找制作一个下拉菜单和下拉设置屏幕 但我找不到任何在 Libgdx 中制作这些的资源 想要一些针对这种特定类型的界面的良好资源的指针或一个简单的示例 Thanks 选择框 https github com libgdx libgdx
  • 正交相机旋转

    我可以使用此代码旋转相机 camera zoom 3 in constructor if camera zoom gt 1 camera zoom 0 01f camera rotate 15 this is done in render
  • iOS 的 Libgdx 项目在模拟器上通过 robovm 编译时显示 libgdx 启动画面?

    如何删除出现在 iOS 模拟器上但未出现在 Android 模拟器中的 libgdx 启动画面 我正在通过 robovm 编译我的 libgdx 项目 Thanks 您将需要替换 RoboVM iOS 项目的 数据 文件夹中的各种 默认 图
  • GdxRuntimeException:无法加载文件

    我正在关注this http code google com p libgdx wiki HelloWorldlibgdx 教程 我想做的是从 badlogic jpg 的副本加载纹理 副本称为 wawa jpg public class
  • 如何生成多个apk(使用gradle,libGDX)

    我试试这个 http tools android com tech docs new build system user guide apk splits 我想生成一些APK x86 armeabi v7a 为了减少Google Play中
  • LibGDX:如何使平铺地图图块可点击?

    如何为平铺地图中的图块添加点击侦听器 以便当您用鼠标选择图块时它会突出显示 libGDX 不直接支持这一点 因为 TiledMap 内容仅用于渲染 您可以轻松创建一个Stage不过 它将充当 TiledMap 的某种覆盖输入层 只需创建一个
  • LibGDX 将 BitmapFont 绘制到中间位置(spritebatch)

    我想使用 BitmapFont 绘制一些文本 临时位置 然后绘制该位置的一部分 到最后的精灵批次 我当时正在考虑画画 到临时 spritebatch 但不可能 将 spritebatch 绘制到另一个上 我怎样才能做到这一点 您可以使用帧缓
  • 如何使用后退键在 LibGDX 中暂停和恢复?

    我正在使用 LibGDX 创建游戏 现在我有两个问题 首先 我试图抓住返回键 以便游戏暂停 我已经打电话给Gdx input setCatchBackKey true 方法在我的Game班级 这是代码 public class CvSGam
  • Box2D - b2body GetUserData 始终返回 null

    我正在尝试根据 box2d 中的 b2body 调整精灵的位置和旋转 创建主体后 我将 userData 属性设置为保存精灵和位置等的主体对象的属性 问题是在勾选方法 b gt GetUserData 中永远不会检索我放入其中的对象 你能看
  • 如何在 libgdx scene2d 上拖放演员?

    我正在使用 libGDX 开发游戏 我想知道如何拖放 Actor 我已经搭建了舞台并绘制了演员 但我不知道如何触发该事件 请尝试帮助我使用我自己的架构 public class MyGame implements ApplicationLi
  • 对话框的对象位置 Libgdx

    我有一个对话框 Dialog dialog new Dialog style dialog setSize 400 500 dialog setPosition Gdx graphics getWidth 2 200 Gdx graphic
  • LibGDX FreeTypeFontGenerator NoSuchField 异常

    现在 我正在使用 Java 中的 LibGDX 构建一个小游戏 并且我想使用 TTF 字体 我已将 gdx freetype jar 和 gdx freetype natives jar 添加到我的构建路径中 但是当我开始运行我的应用程序时
  • 为什么 Box2D 不应该使用像素作为单位?

    手册中说我应该使用小单位 0 1 10米 不鼓励使用像素作为测量单位 但是为什么 Box2D 比我使用小单位时工作得更好 并且具有更好的模拟效果呢 Box2D 是一个模拟框架 内部使用MKS 单位制 http en wikipedia or
  • 如何使用 AssetManager 在 libGDX 中构建 ResourceManager

    我想在我的 Android 游戏中使用非静态 AssetManager 我有很多层次 我应该如何使用AssetManager 我应该为每个级别创建一个单独的 AssetManager 吗 因为如果我创建一个 AssetManager 它将在
  • 具有漫反射和法线贴图纹理的 3D 模型

    我想使用 libgdx 的资源加载器加载具有漫反射纹理和法线贴图的 3D 模型 据我所知 fbx 以及转换后的 g3dj g3db 格式可以包含漫反射纹理 正如我在 fbx conv 示例中看到的那样 骑士 g3db 如何为其添加法线贴图纹
  • LibGdx 如何使用 OrthographicCamera 滚动?

    我已经找了 10 个小时 字面意思 我已经完成了 我需要问一下 事情是我正在学习如何使用 LibGdx 来编写 Java 游戏 我正在做一个水平太空飞船游戏 所以 我最糟糕的问题是我不知道如何滚动 我认为绘制会更好地解释 我想绘制一个巨大的
  • 在 box2d 主体顶部绘制字体

    如何在静态 box2d 主体顶部绘制文本 字体 背景 我能够正确地在身体顶部绘制精灵 我通过拥有一个来做到这一点box2dSpriteBatch像这样投影在 box2dCamera 上box2dSpriteBatch setProjecti
  • 如何在 Libgdx 中获取字符串宽度?

    我想知道如何获得width我的字符串的像素数 位图字体 API 测量宽度String你用你的Font并得到bounds of the String 你要画画了 BitmapFont getBounds String str width 位图
  • 不同 Android 设备上 box2D 中出现奇怪的“口吃”

    我正在用 C 同时开发引擎和游戏 并使用 box2D 作为物理后端 我正在不同的 Android 设备上进行测试 在三分之二的设备上 游戏运行良好 物理效果也很好 然而 在我的 Galaxy Tab 10 1 上 我偶尔会遇到某种 口吃 的

随机推荐

  • 变量在 C# 版本 x64 中不递增

    有人可以向我解释为什么这段代码在 x86 平台上执行时运行良好 而在 x64 平台上执行时失败吗 结果 x86 调试 12345678910 x64 调试 12345678910 x86 版本 12345678910 x64 版本 1111
  • 如何将数据发送到正在运行的 python 线程?

    我有一个类在我的应用程序中的单独线程中运行 我可以同时运行多个线程 并且这些线程是守护进程 经过一段时间后 some这些线程需要接收并处理消息 我该怎么做呢 我的代码示例如下所示 import threading import time c
  • 如何使用 Requirejs 在模块构建中使用 Web Workers?

    我有一个使用 Requirejs 和 Backbonejs 编写的运行良好的应用程序 但有时它确实很慢 例如 当需要进行一些算术工作时 我尝试使用 Web Worker 来完成这样的算术工作 我的模块 traffic js define j
  • 为什么使用 START_STICKY 重新启动 Android 服务如此缓慢?

    我有一个后台服务 我正在这个服务上进行所有操作 该服务有时会与活动配合使用 但如果应用程序关闭 服务将重新启动START STICKY 它工作正常 但有时需要很长时间才能重新启动 例如一分多钟 Override public void on
  • Angular.js 以编程方式将表单字段设置为脏

    我正在以编程方式更新表单上的一些字段的值 我想将字段状态设置为 dirty 做类似的事情 scope myForm username dirty true 似乎不起作用 有一个方法 setPristine我可以用它来重置字段的状态 但没有
  • React Router 4 正则表达式路径 - 匹配找不到参数

    我正在尝试为 React Router 4 进行正则表达式模式匹配 但不幸的是this props match params id未正确解析路径 并显示为未定义 我希望能够访问的路径示例 gps gps air gps a0b6dc45 1
  • 选择 jQuery 中每个可见的最后一个子项

    我想得到最后一个visible td每一个tr在一个表中 这不起作用 因为它尝试选择最后一个孩子if可见 var last visible cells table find tr td visible last child 到目前为止 我想
  • 从网站启动 Chrome 打包的 Web 应用程序

    我有一个 Chrome 打包的 Web 应用程序 这是必需的 因为它需要访问串行端口 并且当我单击该应用程序上的链接 按钮时 我希望能够从我的网站启动它 带有一些数据 网站 如果它能够检测用户是否没有运行 chrome 或者没有安装网络应用
  • 多线程控制台应用程序何时退出?

    class Program public static void Main String args var c new C var thread new Thread new ThreadStart c F thread Start Con
  • 将 cuBLAS 与 Thrust 的复数结合使用

    在我的代码中 我使用推力库中的复数数组 我想使用 cublasZgeam 来转置数组 使用 cuComplex h 中的复数并不是一个更好的选择 因为我对数组进行了大量算术运算 并且 cuComplex 没有定义的运算符 例如 这就是我定义
  • Android代码不扫描BLE设备CC2650

    我正在使用 CC2650STK SensorTag 我从 GitHub 下载了这个开源应用程序 https github com googlesamples android BluetoothLeGatt https github com
  • 如何正确调整 Facebook Canvas 应用程序 (iFrame) 的大小?

    我需要在更新页面内容后调整画布大小 我可以明确地做到这一点 FB Canvas setSize width 760 height 1480 但是 如果没有参数 它就无法工作 即 setSize 另外 我可以通过以下方式调整高度 FB Can
  • 保留 IBOutlet 视图元素真的是最佳实践吗?

    我不断遇到 UIViewControllers 包含大量 IBOutlet 将控制器连接到其视图的子视图 通常是 UILabels 的情况 遵循 最佳实践 即在所有 UI 元素上使用保留 property retain nonatomic
  • SQL 中的大文本和图像

    在 SQL 数据库中存储大量文本 例如 html 页面 是个好主意吗 或者将其作为 html 文件存储在文件系统中是一个更好的主意吗 图像也是如此 将图像数据存储在数据库中是一个好主意还是将它们放在磁盘上更好 例如 存储大量数据是否会导致性
  • 应用程序更新后推送通知令牌是否会更改?

    我问的是两种情况 1 我们从 App Store 进行定期更新后 2 在我们模拟更新后 通过从商店下载当前版本并从 Xcode 中安装和运行新版本 推送通知令牌会改变吗 如果改变 多久改变一次 例如 每次 还是时不时 我问这个 因为我正在做
  • 运行 pod install 时出现“您的项目未明确指定 CocoaPods 主规范存储库”警告

    我跑完之后pod install 我收到一条警告 您的项目没有明确指定 CocoaPods 主规范存储库 由于 CDN 现在被用作默认值 您可以通过以下方式安全地将其从存储库目录中删除 pod repo remove master 要抑制此
  • 为什么 Passport 不能与 cookieSession() 一起使用?

    我正在研究 facebook 授权 发现护照不能与 cookieSession 一起使用 只能与 session 一起使用 在第一种情况下 req user 始终未定义 有可能让它发挥作用吗 您仍然可以使用最新版本的 Express 重现此
  • NPOI - 写入文件会损坏 .xlsx 工作簿

    我有一段代码当前正在写入 xls工作簿 HSSFWorkbook 没有问题 但是 当我尝试使用相同的代码写入 xlsx工作簿 XSSFWorkbook 存档已损坏并且无法在 Excel 中打开 以下代码是我用来访问工作簿 编辑工作簿 然后保
  • 如何禁用下拉元素中的特定项目

    如何使用 jQuery 或 JavaScript 禁用下拉元素的某些项目 与禁用任何其他 HTML 元素相同的方式 使用 option selector prop disabled true 看到它在action http jsfiddle
  • Libgdx box2D 中的碰撞对于某些物体失败

    我正在使用 libgdx 和 box2d 开发我的第一个游戏 我正在使用调试渲染器来测试我的对象 我创建了一些类似汽车的物体 每辆车都有一个主体 它是一个6点的大多边形 长约1米 高0 7米 并有2个通过旋转关节连接的车轮 主车还通过旋转接