【问题标题】:Libgdx and Box2d Detect Collision of two specific bodiesLibgdx 和 Box2d 检测两个特定物体的碰撞
【发布时间】:2013-07-24 08:43:26
【问题描述】:

我有两个身体,都是动态的,其中一个我已经关闭了重力,只想在它被我的另一个身体击中时打开它。我知道我可以设置自己的联系人监听器,但我只想在两个特定的身体接触时指定一个动作。

谁有指导意见?

【问题讨论】:

    标签: box2d libgdx


    【解决方案1】:

    你可以设置body的userdata,这样使用

    public class GameColiision implements ContactListener
    
     {
    
    public GameColiision()
    {
    
    
    }
    
    @Override
    public void beginContact(Contact contact) {
        // TODO Auto-generated method stub
        Body a=contact.getFixtureA().getBody();
        Body b=contact.getFixtureB().getBody();
        a.getUserData();
        if(a.getUserData() instanceof Obstacle&&b.getUserData() instanceof Car)
        {
    
        }
    }
    
    @Override
    public void endContact(Contact contact) {
        // TODO Auto-generated method stub
    
    }
    
    @Override
    public void preSolve(Contact contact, Manifold oldManifold) {
        // TODO Auto-generated method stub
    
    }
    
    @Override
    public void postSolve(Contact contact, ContactImpulse impulse) {
        // TODO Auto-generated method stub
    
    }
    
    }
    
    public class Obstacle 
     {
    
    public Body rectangleBody;
    public Body triangleBody;
    World world;
    public static final float WIDTH=10/40f; 
    public static final float HEIGHT=10/40f; 
    
    
    public Obstacle(World world,float x,float y) 
    {
        this.world=world;
        initRectangle(x,y);
    }
    
    
    private void initRectangle(float x, float y) 
    {
        BodyDef  bodyDef=new BodyDef();
        FixtureDef fixtureDef=new FixtureDef();
    
        bodyDef.type=BodyType.DynamicBody;
        rectangleBody=world.createBody(bodyDef);
    
        PolygonShape  polygonShape=new PolygonShape();
    
        polygonShape.setAsBox(WIDTH,HEIGHT);
        fixtureDef.shape=polygonShape;
    
        fixtureDef.friction=1f;
        fixtureDef.density = 1f;
    
        rectangleBody.createFixture(fixtureDef);
        rectangleBody.setTransform(x, y, 0) ;   
        rectangleBody.setAngularDamping(0);
    
        rectangleBody.setUserData(this);
    
    }
    

    希望这能解决你的问题

    【讨论】:

    • 而且你不应该忘记你不能确定 a 总是“障碍物”而“b”总是“汽车”所以“a”可以是“汽车”而“b”可以是“障碍物”,你也应该这样写:“b.getUserData() instanceof Obstacle && a.getUserData() instanceof Car”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多