猿问

用完短值来检测 LIBGDX 中的碰撞

我在我的 LIBGDX 游戏中使用短值来检测碰撞,但是我放置了太多的元素,我的值已经用完了。我目前在 32768,它被识别为整数。我该怎么办?


这些是我的碰撞位:


public static final short NOTHING_BIT = 0;

public static final short GROUND_BIT = 1;

public static final short FRAN_BIT = 2;

public static final short BRICK_BIT = 4;

public static final short SECONDS_BIT = 8;

public static final short DESTROYED_BIT = 16;

public static final short HIDDEN_BIT = 32;

public static final short ENEMY_BIT = 64;

public static final short ENEMY_HEAD_BIT = 128;

public static final short ENEMY_FRONT_BIT = 256;

public static final short FRAN_HEAD_BIT = 512;

public static final short FRAN_BODY_SENSOR_BIT = 1024;

public static final short ENEMY_LIMIT = 2048;

public static final short WATER_BIT = 4096;

public static final short FIREBALL_BIT = 8192;

public static final short GROUND_ESCAPE = 16384;

这是检测到碰撞的代码:


 @Override

public void beginContact(Contact contact) {


    Fixture fixA = contact.getFixtureA();

    Fixture fixB = contact.getFixtureB();


    int cDef = fixA.getFilterData().categoryBits | fixB.getFilterData().categoryBits;


    switch (cDef){


        case JungleMasters.FRAN_HEAD_BIT | JungleMasters.BRICK_BIT:

            if (fixA.getFilterData().categoryBits == JungleMasters.FRAN_HEAD_BIT){

                ((InteractiveTIleObject)fixB.getUserData()).onHeadHit((Franfran) fixA.getUserData());

            } else {

                ((InteractiveTIleObject) fixA.getUserData()).onHeadHit((Franfran) fixB.getUserData());

            }


            sound = screen.assetManager.manager.get(screen.assetManager.brickBreaking);

            sound.play();


            break;



料青山看我应如是
浏览 145回答 1
1回答

呼唤远方

该categoryBits和maskBits是primarly的Box2D的说哪个夹具碰撞与其他夹具。因此,当您的其中一个fixtures与fixture您不需要的全部或全部发生冲突时category- 或maskBits为它。如果灯具与您不需要的所有其他灯具发生碰撞category- 或maskBits.如果灯具不与任何其他灯具发生碰撞,您可以设置isSensor = true;而不是使用category- 和maskBits。如果您知道哪个对象与另一个对象发生了碰撞,您可以使用UserDataof fixtures。为您拥有的所有类型创建一个枚举:public enum Type {    NOTHING,    GROUND,    FRAN,    FRAN_BODY_SENSOR,    ENEMY_FRONT,    BRICK,    etc...}然后通过创建夹具,您可以将类型设置为 UserData:Fixture fixture = body.createFixture(fixtureDef);fixture.setUserData(Type.GROUND);//short:body.createFixture(fixtureDef).setUserData(Type.GROUND);最后,您ContactListener可以检查夹具的 UserData 以找出哪个对象与哪个对象碰撞:if(fixA.getUserData() == Type.FRAN_HEAD && fixB.getUserData() == Type.BRICK){            //FRAN_HEAD and BRICK has collided}
随时随地看视频慕课网APP

相关分类

Java
我要回答