嗨我有一个由几个物体组成的物体,它们之间的区别在于某人是过滤器而其他人不是。 我希望我的演员在与物理侧碰撞时被摧毁,并且在与传感器碰撞时具有不同的效果。 那么,如果联系人发生在一个部分或另一个部分,我怎样才能检查我的碰撞监听器?
答案 0 :(得分:0)
假设你有一张桌子和一堆奶牛,你想确定是否有奶牛与餐桌相撞。
Body table;
Array<Body> cows;
//define the table and cows
ContactListener listener = new ContactListener() {
@Override
public void beginContact(Contact contact) {
Body bodyA = contact.getFixtureA().getBody();
Body bodyB = contact.getFixtureB().getBody();
for (Body cow : cows) {
if (((cow == bodyA) || (cow == bodyB)) &&
((table == bodyA) || (table == bodyB))) {
//do something
}
}
}
};
这是一个通用的答案,但它告诉你如何检查哪些机构发生了碰撞,我认为这些机构可以回答你的问题。
答案 1 :(得分:0)
可能有很多方法可以做到这一点,但这里是我如何将物理学用于游戏对象映射。不是我坚持宗教的东西,但我试着 - 总有例外。
如果我有一个&#34;游戏对象&#34;,它有一个正文。 body用户数据设置为该对象。
如果我有一个&#34;游戏对象&#34;由部件组成,这些部件是游戏对象部件&#34;,它们将是身体固定装置的用户数据。
我的游戏对象&#34;是&#34; Part Objects&#34;的组合。与身体具有夹具部件的方式相同。
如果您有这样的东西,那么您可以轻松地在碰撞中区分对象的各个部分。如果你真的想要你的游戏对象&#34;由于其他原因由多个身体组成,然后我仍然会制作&#34;游戏对象&#34;有&#34;零件&#34;设置为组成它的实体的用户数据。希望有所帮助。
我还向前迈进了一步 - 我的游戏对象&#34;拥有自己的碰撞处理程序集合。因此,我的单个注册冲突侦听器获取userdata对象并使用相同的参数调用其冲突处理程序。利用多态性。现在我可以将给定对象的碰撞行为附加到该对象。我不必遍历所有对象来决定在我注册的碰撞监听器中做什么。