当前位置: 首页 > 知识库问答 >
问题:

Libgdx和Box2d检测两个特定物体的碰撞

燕英逸
2023-03-14

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

有人有指导吗?

共有1个答案

邵伟
2023-03-14

你可以设置主体的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);

}

希望这能解决你的问题

 类似资料:
  • 嗨,伙计们, 我正在使用libgdx为android开发一个游戏。我完全陷入了探测两个物体碰撞的部分。我有一个我通过下面的函数创建的播放器 和我用玩家相同的功能创建的敌人,我只更改file_path和fixture_name。file_path指向我用box2d编辑器创建的. json文件(站点:http://www.aurelienribon.com/blog/projects/physics-

  • 所以我用Box2D在游戏中进行冲突检测。我有一个包含地形信息的地图:现在它只是一个有道路或草地的字符[][]。现在,在每个关卡开始时,我想创建矩形来描述不同的地形,但是我希望这些矩形得到优化,显然这需要相当多的算法。 我的第一个方法是在关卡开始时为地图上的每一个区块创建一个单独的地形。FPS降低到了5。 我的第二个想法是当玩家沿着地图移动时,简单地为地形创建不同的矩形,删除看不见的矩形。虽然它仍然

  • 我就开门见山了。所以我在做这个游戏,你应该用你的咒语杀死其他物体。我创造了子弹和它们的身体。我们都很好。它正在工作。但我想让它看起来特别和“神奇”,所以我决定使用粒子。我制作了粒子,把它们放在子弹体后面,用下面的代码: 但当我发射多发子弹时,问题是粒子刚刚从我发射的所有第一发子弹中消失,并且只出现在最后一发子弹上。有人能给我介绍一下这个吗? -----------------编辑---------

  • 我的问题主要与它背后的理论有关。我为一个项目制作了一个2D游戏,通过使用Rectangle类中的.overlapps方法检测碰撞,碰撞处理得很好。首先,被认为是连续或离散碰撞技术。当我读到这个理论时,我说它是离散的,但我在网上的文章中读到离散的主要缺点是它在实际发生碰撞后检测到碰撞。所以,我的问题是:它实际上是离散的吗?如果是这样的话,我看不出它有什么缺点吗?谢谢

  • 问题内容: 我主要专注于图形方面,以创建一些2DGame。我看过/看过几本教程,但是没有一部教程那么令人满意。我已经有一个玩家(一个正方形)在屏幕上移动并与其他正方形碰撞。重力等。 如果在屏幕上看到的对象太多(30 * 20),则一切正常。但是,如果我将其增加到300 * 300,则该程序开始运行非常慢,因为它必须检查许多对象。 我真的不知道Minecraft之类的游戏如何与ALL THOSE块一

  • 我最近开始使用Libgdx进行开发。现在,我正在研究自定义形状的碰撞检测。就我而言,我想检测鲨鱼与其他物体的碰撞。由于鲨鱼是一种自定义形状,我使用了Physics Body Editor(https://code.google.com/p/box2d-editor/downloads/detail?name=physics-车身编辑器-2.9.2.zip 我已经有了鲨鱼和其他东西的图像绘制的代码,