[英]Collision detection for individual objects(sensors) in LibGDX, box3d java game
我目前正在使用LibGDX开发Endless Runner。 我有4个传感器(上方,上方,下方,下方,稍后将用于机器学习)。 我需要检测每个传感器和称为“敌人”的对象之间的碰撞。 现在,它检测到Sensor类型和Enemy类型的对象之间的冲突,这是正确的,但我不知道实际触发了哪个 Sensor。 这是负责碰撞检测的代码(在GameStage方法中):
@Override
public void beginContact(Contact contact) {
Body a = contact.getFixtureA().getBody();
Body b = contact.getFixtureB().getBody();
if ((BodyUtils.bodyIsRunner(a) && BodyUtils.bodyIsEnemy(b)) ||
(BodyUtils.bodyIsEnemy(a) && BodyUtils.bodyIsRunner(b))) {
runner.hit();
}else if ((BodyUtils.bodyIsEnemy(a) && BodyUtils.bodyIsSensor(b)) ||
(BodyUtils.bodyIsSensor(a) && BodyUtils.bodyIsEnemy(b))) {
} else if ((BodyUtils.bodyIsRunner(a) && BodyUtils.bodyIsGround(b)) ||
(BodyUtils.bodyIsGround(a) && BodyUtils.bodyIsRunner(b))) {
runner.landed();
}
}
BodyUtils:公共类BodyUtils {
public static boolean bodyInBounds(Body body) {
UserData userData = (UserData) body.getUserData();
switch (userData.getUserDataType()) {
case RUNNER:
case ENEMY:
return body.getPosition().x + userData.getWidth() / 2 > 0;
}
return true;
}
public static boolean bodyIsEnemy(Body body) {
UserData userData = (UserData) body.getUserData();
return userData != null && userData.getUserDataType() == UserDataType.ENEMY;
}
public static boolean bodyIsRunner(Body body) {
UserData userData = (UserData) body.getUserData();
return userData != null && userData.getUserDataType() == UserDataType.RUNNER;
}
public static boolean bodyIsGround(Body body) {
UserData userData = (UserData) body.getUserData();
return userData != null && userData.getUserDataType() == UserDataType.GROUND;
}
public static boolean bodyIsSensor(Body body) {
UserData userData = (UserData) body.getUserData();
return userData != null && userData.getUserDataType() == UserDataType.SENSOR;
}
}
这是完整的代码(box2包中有关userData的最重要部分): https : //github.com/SzymonGalazka/Machine-Learning-Runner/tree/master/core/src/com/pl/runner
实际上,您可以将对象类型作为主体的用户数据传递。 我做的是我只是通过在this
(指传感器)。 然后,您可以在该传感器上运行代码,而无需获取它或任何东西。
因此,您只需要一个bodyIsX方法,例如
public static Sensor getBodyObject(Body b) {
return (Sensor)body.getUserData();
}
显然,上述内容仅在用户数据是传感器的情况下有效,但是您已经可以确定。
有关于该另一个问题在这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.