我正在开展一个使用第三方库的项目,这似乎给我带来了一些麻烦。
该项目是使用MonoGame和FarseerPhysics的游戏。
导致问题的代码(下面的github):
private void DrawDebug(GameTime gameTime, RenderBatch renderBatch)
{
AABB boundingBox = GetBoundingBox();
Vector2 tl = new Vector2(boundingBox.LowerBound.X, boundingBox.LowerBound.Y);
Vector2 tr = new Vector2(boundingBox.LowerBound.X, boundingBox.UpperBound.Y);
Vector2 bl = new Vector2(boundingBox.UpperBound.X, boundingBox.LowerBound.Y);
Vector2 br = new Vector2(boundingBox.UpperBound.X, boundingBox.UpperBound.Y);
Color drawColor = Color.White * 0.4f;
renderBatch.Queue(new DrawLineInstruction(tl, tr, 0) { Color = drawColor });
renderBatch.Queue(new DrawLineInstruction(tl, bl, 0) { Color = drawColor });
renderBatch.Queue(new DrawLineInstruction(tr, br, 0) { Color = drawColor });
renderBatch.Queue(new DrawLineInstruction(bl, br, 0) { Color = drawColor });
}
private AABB GetBoundingBox()
{
AABB boundingBox;
FarseerPhysics.Common.Transform transform = GetFarseerTransform();
BoundingShape.ComputeAABB(out boundingBox, ref transform, 0);
//Weird edit-and-continue bug where properties are duplicated after editing this class
return new AABB() { LowerBound = boundingBox.LowerBound, UpperBound = boundingBox.UpperBound };
}
我在Color drawColor = Color.White * 0.4f;
上设置了断点,并将浮点值更改为其他值。当我继续在BoundingShape.ComputeAABB(...)
上创建NullReferenceException时。
它还显示了2个名为BoundingShape的属性和2个字段_shape(这是BoundingShape的支持字段)。
这是我的错还是我可以解决的问题?
Here is a screenshot。 注意本地视图,BoundingShape已被复制。 此外,Entity(包含正在编辑的代码的类)是抽象的,Level完全实现抽象类。
奇怪的部分:
它必须与out和ref参数有关,因为如果我在一个数组中返回LowerBound和UpperBound然后它可以工作,但是如果我返回AABB实例则它会失败。
我尝试过的事情:
直接使用BoundingShape的支持字段(无结果,支持字段也重复,请参见屏幕截图)
将边界框代码放在自己的方法中(没有结果,只有在将返回类型更改为数组时)。
在Microsoft.Xna.Framework.Game.SortingFilteringCollection.ForEachFilteredItem(System.Action action, Microsoft.Xna.Framework.GameTime userData)
的
从我的解决方法中得到帮助;可能有一些视觉工作室设置导致这个?
感谢您阅读我的问题