我有三个长方形的积木:地面积木,蓝色积木,英雄积木。地面被放置在屏幕的底部,蓝色积木放在地面积木上,英雄积木落到蓝色积木上。我有监听器,当英雄被触地时,它会侦测到。有两种情况: 1)当英雄从较低的高度跌落到蓝色积木时,它的ok侦听器通知英雄只接触蓝色积木。2)当英雄从稍高的地方跌落到蓝色方块时,听众通知英雄着地了!如何解决这个问题?
这是hero 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;
}
发布于 2011-08-19 10:58:46
事实上,它是不同的,这取决于高度下降,这表明,英雄是穿透蓝色块直接接触地面。尝试将英雄块设置为子弹体,如果问题已解决,则情况确实如此。您还可以试验蓝色块的高度,看看它如何影响事物。
我建议使用debug draw来检查您所看到的是物理引擎中正在发生的事情。
发布于 2011-08-20 21:50:40
我发现了如何解决这个问题: 1)我将Farseer项目插入到我的解决方案中;2)在Settings.cs中找到了行公共常量浮点AABBExtension = 0.1f;3)将值更改为'0.01f‘。它起作用了!
https://stackoverflow.com/questions/7097052
复制相似问题