gpt4 book ai didi

c# - Farseer 3.3 检查未启用的物体是否会在启用时发生碰撞(生成)

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:52 24 4
gpt4 key购买 nike

我正在使用 Farseer 3.3 和 XNA。

我有一个问题,我无法很好地解决。

我遇到的情况是,有一个世界,里面有很多人,他们都在忙着做那件事。

然后我有一个物体的物体被设置为未启用,有没有一种很好的方法来检查物体当前是否与任何东西发生碰撞?即要知道我是否应该启用它并将其设置为动态,这是否是一个干净的生成?

提前致谢。

最佳答案

对于在此处尝试解决同类问题时发现此帖子的任何其他人,我最终就是这样做的。

在这个例子中,我使用单词 Item 来表示包含 body 等的类,这可以是你的播放器/子弹/任何东西。

在您的 Item 类中订阅发生碰撞和分离事件时的物体。

        this.Body.OnCollision += Body_OnCollision;
this.Body.OnSeparation += Body_OnSeperation;

然后为该项目设置一个成员以保存碰撞和分离的计数。

私有(private) _canBePlacedCounter = 0;

在事件处理程序方法上,增加或减少成员数。在下面的代码中,我有一些额外的条件,我只想在一个项目被放入“世界”时执行这些操作。

    private bool Body_OnCollision(Fixture fixturea, Fixture fixtureb, Contact contact)
{
if(this.IsBeingPlaced)
{
_canBePlacedCounter++;
}

return true;
}

private void Body_OnSeperation(Fixture fixturea, Fixture fixtureb)
{
if (this.IsBeingPlaced)
{
_canBePlacedCounter--;
}
}

然后我们可以设置一个简单的公共(public)属性(如果我们想进入编码标准,这确实应该是一种方法,但现在不是时间或地点)

    public bool CanBeDropped
{
get
{
if (_canBePlacedCounter == 0) return true;
else return false;
}
}

这个实现的原因是,我最初有一个 bool 值,每当我得到其中一个事件时,我就将它设置为 true 或 false。问题是……如果您的项目与项目 A 发生碰撞,然后与项目 B 发生碰撞,然后离开项目 A,您会得到未发生碰撞的读数。所以...使用这样的计数器我们可以计算所有的碰撞和分离。相信我,这绝对是一种魅力。

希望对外面的人有用。

更新:我发现这只适用于基本矩形。如果您进入具有许多多边形的主体,例如那些从图像自动生成的多边形,那么无论出于何种原因,farseer 定期引发的分离事件少于碰撞事件,这意味着计数器通常不会返回 0。

关于c# - Farseer 3.3 检查未启用的物体是否会在启用时发生碰撞(生成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7216303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com