我正在尝试使用Box2D构建游戏。Box2D如何检测触摸元素
我的问题是:在每次更新引擎时,我都需要检查每个元素并根据触摸元素的状态更新元素的状态。所以我真的需要一个函数来检测哪个元素触及哪个元素。
我该怎么做?
编辑: 示例 - >我有5个盒子,box1-box2-box3互相接触,box4-box5互相接触。而如果没有对勾结任何变化如果BOX2变为蓝色,盒1和BOX3状态也应该变成蓝色
我正在尝试使用Box2D构建游戏。Box2D如何检测触摸元素
我的问题是:在每次更新引擎时,我都需要检查每个元素并根据触摸元素的状态更新元素的状态。所以我真的需要一个函数来检测哪个元素触及哪个元素。
我该怎么做?
编辑: 示例 - >我有5个盒子,box1-box2-box3互相接触,box4-box5互相接触。而如果没有对勾结任何变化如果BOX2变为蓝色,盒1和BOX3状态也应该变成蓝色
您需要实现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;
}
问题是我有很多在游戏中动态创建的相同类型的元素。我真的需要知道正确的ehich元素触摸。 – laymelek 2014-09-21 18:03:11
当您使用BodyDef创建body时bodyDef = new BodyDef();在将它们添加到物理世界之前,您可以像这样设置和对象userdata:bodyDef.userData = data;为每一个设置一个唯一的标识符。 – 2014-09-21 18:10:14
我知道。但我的问题是我需要将我的算法不要串通。假设我有5个箱子碰撞。箱子1,2,3彼此碰撞,箱子4,5互相碰撞。我按下一个按钮,box2会变成蓝色。我的算法应该检测到box1和box3与box2发生碰撞,所以它们也应该变成蓝色。但是box4和5不会变成蓝色,因为它们没有与任何其他蓝色框的任何连接 – laymelek 2014-09-21 18:24:52
您是否使用Box2D或JBox2D库的NDK版本? – 2014-09-21 17:18:47
我使用的是我在android studio中导入的库 – laymelek 2014-09-21 17:20:47