Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LibGDX、box3d java游戏中单个对象(传感器)的碰撞检测_Java_Design Patterns_Libgdx_Box2d_Game Development - Fatal编程技术网

LibGDX、box3d java游戏中单个对象(传感器)的碰撞检测

LibGDX、box3d java游戏中单个对象(传感器)的碰撞检测,java,design-patterns,libgdx,box2d,game-development,Java,Design Patterns,Libgdx,Box2d,Game Development,我目前正在LibGDX中开发一个无止境的跑步者。 我有4个传感器(上远、上近、下远、下近,稍后将用于机器学习)。我需要检测每个传感器和被称为敌人的物体之间的碰撞。现在它检测到传感器类型的物体和敌人之间的碰撞,这是正确的,但我不知道实际触发了哪个传感器。 下面是负责碰撞检测的代码(在GameStage方法中): BodyUtils: 公营机构{ public static boolean bodyInBounds(Body body) { UserData userData = (User

我目前正在LibGDX中开发一个无止境的跑步者。 我有4个传感器(上远、上近、下远、下近,稍后将用于机器学习)。我需要检测每个传感器和被称为敌人的物体之间的碰撞。现在它检测到传感器类型的物体和敌人之间的碰撞,这是正确的,但我不知道实际触发了哪个传感器。 下面是负责碰撞检测的代码(在GameStage方法中):

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包中用户数据的最重要部分):

您实际上可以将对象类型作为主体的用户数据传递。我要做的就是传入
这个
(指传感器)。然后,您可以在该传感器上运行代码,而无需获取它或任何东西

所以你只需要一个bodyIsX方法

public static Sensor getBodyObject(Body b) {
    return (Sensor)body.getUserData();
}
显然,只有当用户数据是传感器时,上述方法才有效,但您已经可以确定这一点

关于这一点还有另一个问题

public static Sensor getBodyObject(Body b) {
    return (Sensor)body.getUserData();
}