2014-09-21 84 views
0

我正在尝试使用Box2D构建游戏。Box2D如何检测触摸元素

我的问题是:在每次更新引擎时,我都需要检查每个元素并根据触摸元素的状态更新元素的状态。所以我真的需要一个函数来检测哪个元素触及哪个元素。

我该怎么做?

编辑: 示例 - >我有5个盒子,box1-box2-box3互相接触,box4-box5互相接触。而如果没有对勾结任何变化如果BOX2变为蓝色,盒1和BOX3状态也应该变成蓝色

+0

您是否使用Box2D或JBox2D库的NDK版本? – 2014-09-21 17:18:47

+0

我使用的是我在android studio中导入的库 – laymelek 2014-09-21 17:20:47

回答

1

您需要实现ContactListener在一个类,并使用它的方法:

public class CollisionListener implements ContactListener { 

    @Override 
    public void beginContact(Contact contact) { 


    } 

    @Override 
    public void endContact(Contact arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void postSolve(Contact arg0, ContactImpulse arg1) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void preSolve(Contact arg0, Manifold arg1) { 
     // TODO Auto-generated method stub 

    } 

} 

可以设置这样

world.setContactListener(new CollisionListener()); 

每次两项接触,beginContact(联系接触)监听器将被调用,你会得到关于这两个项目的碰撞联系人对象的信息。您可以像这样访问它们

if (contact.getfixtureA.getBody().getUserData() == "element1" && 
    contact.getfixtureB.getBody().getUserData()=="element2"){ 
    Colliding = true; 
} 
+0

问题是我有很多在游戏中动态创建的相同类型的元素。我真的需要知道正确的ehich元素触摸。 – laymelek 2014-09-21 18:03:11

+0

当您使用BodyDef创建body时bodyDef = new BodyDef();在将它们添加到物理世界之前,您可以像这样设置和对象userdata:bodyDef.userData = data;为每一个设置一个唯一的标识符。 – 2014-09-21 18:10:14

+0

我知道。但我的问题是我需要将我的算法不要串通。假设我有5个箱子碰撞。箱子1,2,3彼此碰撞,箱子4,5互相碰撞。我按下一个按钮,box2会变成蓝色。我的算法应该检测到box1和box3与box2发生碰撞,所以它们也应该变成蓝色。但是box4和5不会变成蓝色,因为它们没有与任何其他蓝色框的任何连接 – laymelek 2014-09-21 18:24:52