【发布时间】:2012-05-01 17:44:48
【问题描述】:
当我在调试模式下运行我的程序时,它会在一个非 null 的对象上弹出 NullReferenceException - 它按照 Locals 视图中的定义显示。有问题的对象是 SFML.Graphics.Sprite,其中只有一个字段为空(myInverseTransform),但是当我检查其他 Sprite 时,它们在那里也为空。
有谁知道是什么原因造成的,或者我怎样才能找到异常所指的空对象是什么?
相关代码:
代码如下:
(在雪碧中:)
public void Draw(RenderTarget target, RenderStates states)
{
states.Transform *= Transform;
RenderStates.MarshalData marshaledStates = states.Marshal();
if (target is RenderWindow)
{
sfRenderWindow_drawSprite(((RenderWindow)target).CPointer, CPointer, ref marshaledStates);
}
else if (target is RenderTexture)
{
sfRenderTexture_drawSprite(((RenderTexture)target).CPointer, CPointer, ref marshaledStates);
}
}
(在变换中:)
public static Transform operator *(Transform left, Transform right)
{
return new Transform(left).Combine(right);
}
public Transform Combine(Transform transform)
{
sfTransform_combine(CPointer, transform.CPointer);
return this;
}
else if (target is RenderTexture)
{
sfRenderTexture_drawSprite(((RenderTexture)target).CPointer, CPointer, ref marshaledStates);
}
}
调用Sprite.Draw时this.Transform被定义(根据Locals视图),但是在Transform的*操作符中右边变量为null的问题;
【问题讨论】:
-
显示你的代码,问题可能与局部和全局变量有关
-
看起来 SFML 中存在某种缺陷 - 正在内部访问一个空变量,它只是没有更深入地向您展示,因为它无法访问 SFML 的源代码。跨度>
-
我更深入地研究了 Draw,但我得到的是在内部调用 (Sprite.Draw) 中有一行写着 states.Transform *= Transform,在 * 运算符中它说对Transform为null,但在Sprite.Draw中this.Transform不为null,所以还是同一个问题。
标签: c# visual-studio-2010 nullreferenceexception sfml