У меня есть три прямоугольных блока: блок земли, синий блок, блок героя.Земля находится внизу экрана, синий блок лежит на наземном блоке, а геройский блок падает на синий блок.У меня есть слушатель, который определяет, когда герой касается земли.Есть две ситуации: 1) Когда герой падает с низкой высоты на синий блок, его нормальный слушатель уведомляет, что герой связывается только с синим блоком.2) Когда герой падает с немного более высокой высоты на синий блок, слушатель уведомляет, что герой касается земли !!!Как решить эту проблему?
Это слушатель героя OnCollision:
bool heroBody_OnCollision(Fixture fixtureA, Fixture fixtureB, Contact contact)
{
Texture2D textureB = (Texture2D)fixtureB.UserData;
string textureBName = ((string)textureB.Tag).ToLower();
if (textureBName == "ground")
{
OnHeroTouchedGround();
return true;
}
else if (textureBName.Contains("blue"))
{
OnHeroTouchedBlueBlock();
return true;
}
return true;
}
public HeroState GetHeroState()
{
ContactEdge contactEdge = null;
if (heroBody != null) contactEdge = heroBody.ContactList;
while (contactEdge != null)
{
if (heroBody.LinearVelocity == Vector2.Zero)
{
Texture2D textureA = (Texture2D)contactEdge.Contact.FixtureA.UserData;
string textureAName = ((string)textureA.Tag).ToLower();
Texture2D textureB = (Texture2D)contactEdge.Contact.FixtureB.UserData;
string textureBName = ((string)textureB.Tag).ToLower();
if (textureAName == "ground" || textureBName == "ground")
return HeroState.OnGroud;
else if (textureAName.Contains("blue") || textureBName.Contains("blue"))
return HeroState.OnHome;
}
contactEdge = contactEdge.Next;
}
return HeroState.Playing;
}