Когда я запускаю в режиме отладки мою программу, он выдает исключение NullReferenceException для объекта, который не является нулевым, - он выглядит так, как определено в представлении «Локали». Этот объект является SFML.Graphics.Sprite, и только одно из его полей равно null (myInverseTransform), но когда я проверил другие спрайты, они тоже были пустыми.C# сообщает об объекте как null, когда он не является
Кто-нибудь знает, что может вызвать это, или как я могу найти то, что является нулевым объектом, на которое ссылается исключение?
Соответствующий код:
вот код:
(в 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);
}
}
(в Transform :)
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;
Показать ваш код, проблема может быть с локальной и глобальной переменной – Likurg
Похоже, что-то вроде дефекта в SFML - доступ к нулевой переменной осуществляется внутренне, и он просто не показывает вас более глубоко, потому что у него нет доступа к исходный код для SFML. – Sander
Я пошел глубже в Draw, но я понял, что во внутреннем вызове (Sprite.Draw) есть строка, в которой говорится state.Transform * = Transform, а в операторе * сказано, что правильное Transform имеет значение null, но в Sprite.Draw this.Transform не является нулевым, так что это все тот же вопрос. – nihohit