2

プログラムをデバッグ モードで実行すると、null ではないオブジェクトで NullReferenceException がポップされます。ローカル ビューで定義されているように表示されます。問題のオブジェクトは SFML.Graphics.Sprite で、そのフィールドの 1 つだけが null (myInverseTransform) ですが、他のスプライトを確認したところ、そこも null でした。

これを引き起こす原因を知っている人はいますか、または例外が参照している null オブジェクトを見つけるにはどうすればよいですか?

これがその写真です

関連するコード:

コードは次のとおりです。

(スプライトで:)

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

変数の値が null であると主張しているわけではありません。(オブジェクトを null にすることはできません。ただし、変数NullReferenceExceptionは null 値を持つことができます。大きな違いがあります。)発生したと言っているだけです。たとえば、SFML ライブラリのバグである可能性があります。スタック トレースを調べて、例外がスローされている場所を正確に見つけ、そこから移動する必要があります。

于 2012-04-20T06:16:17.323 に答える
0

ほとんどの場合、問題は Draw() メソッド内にあり、何かが null 変数でメンバーにアクセスしようとしていることがわかります。メソッド内のローカル変数である可能性もあります。

SFML (オープンソースですか?) を自分でコンパイルしてみて、そのコピーを使用して何が問題なのかを正確に確認できます。

于 2012-04-20T06:24:50.727 に答える