使用Bullet和LibGDX检测btCompoundShape与btSphereShape的碰撞

使用Bullet和LibGDX检测btCompoundShape与btSphereShape的碰撞,libgdx,collision-detection,bullet,Libgdx,Collision Detection,Bullet,我正在尝试使用LibGDX项目中使用的Bullet库检测btCompountShape和btSphereShape之间的冲突 我的检测方法如下所示: def checkCollision(left: btCollisionObject, right: btCollisionObject) = { val leftWrapper = new CollisionObjectWrapper(left) val rightWrapper = new CollisionObjectWrapper(

我正在尝试使用
LibGDX
项目中使用的
Bullet
库检测
btCompountShape
btSphereShape
之间的冲突

我的检测方法如下所示:

def checkCollision(left: btCollisionObject, right: btCollisionObject) = {
  val leftWrapper = new CollisionObjectWrapper(left)
  val rightWrapper = new CollisionObjectWrapper(right)

  val algorithm = collisionDispatcher.findAlgorithm(leftWrapper.wrapper, rightWrapper.wrapper)

  val info = new btDispatcherInfo()
  val result = new btManifoldResult(leftWrapper.wrapper, rightWrapper.wrapper)

  algorithm.processCollision(leftWrapper.wrapper, rightWrapper.wrapper, info, result)

  val r = result.getPersistentManifold.getNumContacts > 0

  result.dispose()
  info.dispose()
  algorithm.dispose()
  leftWrapper.dispose()
  rightWrapper.dispose()

  r
} 
当我使用它来检测两个
btSphereShape
对象之间的碰撞时,它工作得非常好。但是当我通过一个名为
btCompoundShape
的程序时,它失败了。为了测试,我创建了我的
btCompoundShape
,只有一个子形状,即simple
btSphereShape
。它失败,出现以下错误:

Exception in thread "LWJGL Application" java.lang.NullPointerException
  at com.game.CollisionDetector$class.checkCollision(CollisionDetector.scala:19)
  at com.game.SmlPwsat2Game.checkCollision(SmlPwsat2Game.scala:14)
  at com.game.SmlPwsat2Game.render(SmlPwsat2Game.scala:87)
  at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:207)
  at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)

我检查了
result.getPersistentManifold
是否返回null。为什么?我该怎么做才能使它工作呢?

A
btCompoundShape
是多种形状的组合。对于多个形状,没有一种算法。你需要一个算法为每个形状,它是针对球体

也就是说,你根本不应该关心这个问题,因为碰撞世界会为你解决这个问题。看起来你在我的教程中间停了下来。
checkCollision
方法仅作为示例。让你看看发生了什么。不要实际使用它


<>检查,确保阅读整个教程,不要停留在中间。在本教程的后面部分,我将向您展示如何使用碰撞世界,并删除
checkCollision
方法。

a
btCompoundShape
是多个形状的组合。对于多个形状,没有一种算法。你需要一个算法为每个形状,它是针对球体

也就是说,你根本不应该关心这个问题,因为碰撞世界会为你解决这个问题。看起来你在我的教程中间停了下来。
checkCollision
方法仅作为示例。让你看看发生了什么。不要实际使用它


<>检查,确保阅读整个教程,不要停留在中间。在本教程的后面部分,我将向您展示如何使用碰撞世界,并删除
checkCollision
方法。

a
btCompoundShape
是多个形状的组合。对于多个形状,没有一种算法。你需要一个算法为每个形状,它是针对球体

也就是说,你根本不应该关心这个问题,因为碰撞世界会为你解决这个问题。看起来你在我的教程中间停了下来。
checkCollision
方法仅作为示例。让你看看发生了什么。不要实际使用它


<>检查,确保阅读整个教程,不要停留在中间。在本教程的后面部分,我将向您展示如何使用碰撞世界,并删除
checkCollision
方法。

a
btCompoundShape
是多个形状的组合。对于多个形状,没有一种算法。你需要一个算法为每个形状,它是针对球体

也就是说,你根本不应该关心这个问题,因为碰撞世界会为你解决这个问题。看起来你在我的教程中间停了下来。
checkCollision
方法仅作为示例。让你看看发生了什么。不要实际使用它


<>检查,确保阅读整个教程,不要停留在中间。在本教程的后面部分,我将向您展示如何使用碰撞世界,并删除
checkCollision
方法。

好的,我就是这么做的-开始玩您的教程,并逐渐远离它。谢谢,我会继续读下去。好吧,这就是我所做的——开始玩你的教程,然后渐渐远离了它。谢谢,我会继续读下去。好吧,这就是我所做的——开始玩你的教程,然后渐渐远离了它。谢谢,我会继续读下去。好吧,这就是我所做的——开始玩你的教程,然后渐渐远离了它。谢谢,我会继续读下去。