2

当我在调试模式下运行我的程序时,它会在一个非 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;

4

2 回答 2

5

它并没有声称您的变量值为空。(一个对象不能为空——虽然一个变量可以有一个空值。有很大的不同。)这只是说NullReferenceException发生了。例如,它可能是 SFML 库中的错误。您应该查看堆栈跟踪以找出引发异常的确切位置,然后从那里开始。

于 2012-04-20T06:16:17.323 回答
0

您很可能会发现问题出在 Draw() 方法中,其中某些东西试图访问空变量中的成员——它甚至可能是方法中的局部变量。

您可以尝试自己编译 SFML(它是开源的吗?)并使用该副本来查看到底出了什么问题。

于 2012-04-20T06:24:50.727 回答