我正在创建一个andengine游戏(参考本教程http://www.matim-dev.com/full-game-tutorial---part-1.html),我的主要角色走路并被顶部掉落的砖块击中。如果他被倒下的砖块击中,他就会死去。但是一旦砖块在地面上,主要的charachter可以触摸它并跳上它。现在我知道如何找到两个身体是否相互接触。但如何找到接触是在charachter的上侧还是在身体的左侧或右侧。
我用于联系的代码如下
private ContactListener contactListener()
{
ContactListener contactListener = new ContactListener()
{
public void beginContact(Contact contact)
{
final Fixture x1 = contact.getFixtureA();
final Fixture x2 = contact.getFixtureB();
Vector2[] contactPoints = contact.getWorldManifold().getPoints();
System.out.println("the points are as ::"+contactPoints);
if (x1.getBody().getUserData() != null && x2.getBody().getUserData() != null)
{
if (x2.getBody().getUserData().equals("player"))
{
player.increaseFootContacts();
}
if (x1.getBody().getUserData().equals("platform2") && x2.getBody().getUserData().equals("player"))
{
engine.registerUpdateHandler(new TimerHandler(0.2f, new ITimerCallback()
{
public void onTimePassed(final TimerHandler pTimerHandler)
{
pTimerHandler.reset();
engine.unregisterUpdateHandler(pTimerHandler);
x1.getBody().setType(BodyType.DynamicBody);
}
}));
}
if (x1.getBody().getUserData().equals("platform3") && x2.getBody().getUserData().equals("player"))
{
x1.getBody().setType(BodyType.DynamicBody);
}
}
}
public void endContact(Contact contact)
{
final Fixture x1 = contact.getFixtureA();
final Fixture x2 = contact.getFixtureB();
if (x1.getBody().getUserData() != null && x2.getBody().getUserData() != null)
{
if (x2.getBody().getUserData().equals("player"))
{
player.decreaseFootContacts();
}
}
}
public void preSolve(Contact contact, Manifold oldManifold)
{
}
public void postSolve(Contact contact, ContactImpulse impulse)
{
}
};
return contactListener;
}
请给我一些建议。
答案 0 :(得分:0)
这对你有用吗,或者你需要更多关于身体接触方法的信息?
public boolean areBodiesContacted(Body pBody1, Body pBody2,
Contact pContact)
{
if(pContact.getFixtureA().getBody().equals(pBody1) ||
pContact.getFixtureB().getBody().equals(pBody1))
if(pContact.getFixtureA().getBody().equals(pBody2) ||
pContact.getFixtureB().getBody().equals(pBody2))
return true;
return false;
}