亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用完短值來檢測 LIBGDX 中的碰撞

用完短值來檢測 LIBGDX 中的碰撞

料青山看我應如是 2021-09-12 10:41:35
我在我的 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;這是檢測到碰撞的代碼: @Overridepublic 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;
查看完整描述

1 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

該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

}


查看完整回答
反對 回復 2021-09-12
  • 1 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號