java - 未检测到同时碰撞
问题描述
我将 JBox2D 与 LibGDX 一起使用,并希望检测与传感器的同时碰撞。我遇到的问题是可以检测到一次碰撞,但是如果同时发生任何其他碰撞,它们就不会通过。
例如子弹击中僵尸。如果僵尸与窗口主体发生碰撞,那么子弹会击中僵尸,但碰撞不会传递给接触侦听器。
这是我如何发送联系信息和创建的正文的简化示例。
联系听众
/** All current contacts */
val contacts = ListBuffer[Contact]()
override def create(): Unit = {
world.setContactListener(new ContactListener() {
override def postSolve(contact: Contact, impulse: ContactImpulse): Unit = {}
override def endContact(contact: Contact): Unit = {}
override def beginContact(contact: Contact): Unit = {
contacts += contact
}
override def preSolve(contact: Contact, oldManifold: Manifold): Unit = {
}
})
}
def update(): Unit ={
/** Send all contacts to the collided objects */
contacts.foreach(c => {
if (c.getFixtureA != null){
c.getFixtureA.getUserData.asInstanceOf[GameObject].collisionDetected(c)
}
if (c.getFixtureB != null){
c.getFixtureB.getUserData.asInstanceOf[GameObject].collisionDetected(c)
}
})
contacts.clear()
}
碰撞检测到子弹的实现。
override def collisionDetected(contact: Contact): Unit = {
super.collisionDetected(contact)
contact.getFixtureA.getUserData match {
case zombie: Zombie => zombie.lowerHealth(damage)
case _ =>
}
contact.getFixtureB.getUserData match {
case zombie: Zombie => zombie.lowerHealth(damage)
case _ =>
}
alive = false
}
子弹体
val bodyDef = {
val bD = new BodyDef()
bD.`type` = BodyDef.BodyType.DynamicBody
bD.angularDamping = 100
bD
}
lazy val polygon: Rectangle = {
val rect = new Rectangle(sprite.getBoundingRectangle())
rect
}
lazy val box2dShape: Shape = {
val circle = new CircleShape()
circle.setRadius(0.1f * Constants.WorldToBox)
circle
}
lazy val fixtureDef: FixtureDef = {
val fD = new FixtureDef()
fD.filter.categoryBits = Constants.CategoryBullet
fD.filter.maskBits = Constants.MaskBullet
fD
}
lazy val fixture: Fixture = {
fixtureDef.shape = box2dShape
fixtureDef.density = 1f
val f = body.createFixture(fixtureDef)
f.setUserData(this)
box2dShape.dispose()
f
}
lazy val body: Body = controller.world.createBody(bodyDef)
body.setBullet(true)
子弹和僵尸的身体非常相似,除了僵尸是传感器和子弹有body.setBullet(true)
。
如果需要更多信息,请告诉我。
这可能是什么原因?
解决方案
推荐阅读
- next.js - 指定的模块无法找到。\\?\d:\next.js\firstapp\node_modules\@next\swc-win32-x64-msvc\next-swc.win32-x64-msvc.node
- r - 如何摆脱矩阵顶部的 dim1、dim2、...?
- ibm-midrange - RPGLE/free - 动态指定数据区库
- sql - 如何确定 BigQuery 中的 GROUPING 值是否为 NULL?
- openstack - OpenStack monasca 空结果
- javascript - http请求后的Process.exit()
- c# - 如何使用 takeown 或 icacls 在 c# 中获取文件的所有权?
- r - 将条形图和线图与 R 中的次 Y 轴相结合
- c++ - `class function<_Res(_ArgTypes...)>` 是什么意思?
- python - 有没有办法序列化一个类,以便可以独立于其原始脚本对其进行反序列化?