Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Box2d:设置为活动和非活动_C#_Xna_Box2d - Fatal编程技术网

C# Box2d:设置为活动和非活动

C# Box2d:设置为活动和非活动,c#,xna,box2d,C#,Xna,Box2d,我正在使用Box2d-Box2dx的XNA端口用C#编写一个XNA游戏 树或僵尸等实体被表示为游戏对象GameObjectManager在游戏世界中添加和删除它们: /// <summary> /// Does the work of removing the GameObject. /// </summary> /// <param name="controller">The GameObject to be removed.

我正在使用Box2d-Box2dx的XNA端口用C#编写一个XNA游戏

树或僵尸等实体被表示为游戏对象
GameObjectManager
在游戏世界中添加和删除它们:

    /// <summary>
    /// Does the work of removing the GameObject.
    /// </summary>
    /// <param name="controller">The GameObject to be removed.</param>
    private void removeGameObjectFromWorld(GameObjectController controller)
    {
        controllers.Remove(controller);
        worldState.Models.Remove(controller.Model);
        controller.Model.Body.SetActive(false);
    }

    public void addGameObjectToWorld(GameObjectController controller)
    {
        controllers.Add(controller);
        worldState.Models.Add(controller.Model);
        controller.Model.Body.SetActive(true);
    }
worldQueryUtils:

    // this could be cached if we know bodies never change
    public GameObjectController gameObjectOfBody(Body body)
    {
        return worldQueryEngine.GameObjectsForPredicate(x => x.Model.Body == body).Single();
    }
此方法引发错误:

System.InvalidOperationException was unhandled
  Message="Sequence contains no elements"
  Source="System.Core"
  StackTrace:
       at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
       at etc

为什么会这样?我能做些什么来避免它?在调用
body.SetActive()
之前,已多次调用此方法。我觉得这可能把事情搞砸了。

有几件事。错误实际上来自单个方法,因为它假定序列中至少有一项。如果您想要更宽容的行为,请使用SingleOrDefault,它将返回该类型的默认值(如果是类,则为null)

第二,“身体”对象。。。它可能重写了equals方法,在这种情况下,执行“==”时可能会得到奇数结果。如果您确实在寻找同一个实例(它是一个类),那么可以使用
object.ReferenceEquals
方法


第三,你应该重新思考你的设计。任何时候,当您必须在集合中循环查找给定项时(这是所有的.Where方法),您都有机会使用更好的算法

controller.Model.Body是box2d对象吗?
System.InvalidOperationException was unhandled
  Message="Sequence contains no elements"
  Source="System.Core"
  StackTrace:
       at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
       at etc