首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Farseer物理学:碰撞检测问题

Farseer物理学:碰撞检测问题
EN

Stack Overflow用户
提问于 2011-08-18 01:37:57
回答 2查看 1.7K关注 0票数 1

我有三个长方形的积木:地面积木,蓝色积木,英雄积木。地面被放置在屏幕的底部,蓝色积木放在地面积木上,英雄积木落到蓝色积木上。我有监听器,当英雄被触地时,它会侦测到。有两种情况: 1)当英雄从较低的高度跌落到蓝色积木时,它的ok侦听器通知英雄只接触蓝色积木。2)当英雄从稍高的地方跌落到蓝色方块时,听众通知英雄着地了!如何解决这个问题?

这是hero OnCollision监听器:

代码语言:javascript
运行
复制
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;
    }
EN

回答 2

Stack Overflow用户

发布于 2011-08-19 10:58:46

事实上,它是不同的,这取决于高度下降,这表明,英雄是穿透蓝色块直接接触地面。尝试将英雄块设置为子弹体,如果问题已解决,则情况确实如此。您还可以试验蓝色块的高度,看看它如何影响事物。

我建议使用debug draw来检查您所看到的是物理引擎中正在发生的事情。

票数 0
EN

Stack Overflow用户

发布于 2011-08-20 21:50:40

我发现了如何解决这个问题: 1)我将Farseer项目插入到我的解决方案中;2)在Settings.cs中找到了行公共常量浮点AABBExtension = 0.1f;3)将值更改为'0.01f‘。它起作用了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7097052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档