我正在做一个简单的跳投游戏,并且有碰撞的问题。在项目中,我有播放器和平台类。播放机正在重写shouldCollide(治具fixtureA,治具fixtureB)方法。我的问题是,如果有办法获得与fixtureA和fixtureB的球员是否与平台碰撞?我在libgdx的github上看过演示,但是那里的项目(超级跳投)似乎不使用box2D,所以我对如何在我的项目中适当地制造冲突感到很费劲。
我现在的shouldCollide现在看起来如下:
@Override
public boolean shouldCollide(Fixture fixtureA, Fixture fixtureB) {
if(fixtureA == fixture || fixtureB == fixture){
return body.getLinearVelocity().y< 0;
}
return false;
}将两个固定装置(A和B)与夹具进行比较,可以看出玩家是否是“碰撞制造者”(抱歉,但我在英语中找不到合适的词),只是因为它在player类中的定义与方法相同。
我发现我可以在平台类中的userData中添加字符串,然后在shoudCollide中只能得到这个userData,我想知道这是否是一个好方法。
发布于 2013-12-23 06:04:01
我发现我可以在平台类中的userData中添加字符串,然后在shoudCollide中只能得到这个userData,我想知道这是否是一个好方法。
实际上,您可以在用户数据中放置任何Object。
如果你真的只有平台和播放器,你可能会做以下的事情。请注意,这只是一个快速的演示,它并不涵盖所有情况(比如玩家与玩家的碰撞,或者平台与平台的碰撞)。对于更复杂的场景,您可能需要找到一个使用反射的更通用的算法。
Player player = ...;
playerFixture.setUserData(player);
Platform platform = ...;
platformFixture.setUserData(platform);
...
@Override
public boolean shouldCollide(Fixture fixtureA, Fixture fixtureB) {
if (fixtureA.getUserData() != null && fixtureB.getUserData() != null) {
Player player;
Platform platform;
if (fixtureA.getUserData() instanceof Player) {
player = fixtureA.getUserData();
platform = fixtureB.getUserData();
} else {
player = fixtureB.getUserData();
platform = fixtureA.getUserData();
}
// now you have full access to the player and the platform
}
return false;
}对于冲突筛选器来说,这可能有点过火了,但是一旦您必须实现冲突处理程序,您将需要真正的实体,而不仅仅是Strings。
https://stackoverflow.com/questions/20734270
复制相似问题