Farseer / XNA Assertion Failed, Положение Vector2 для тела, модифицированного матрицей камеры - PullRequest
0 голосов
/ 30 августа 2011

Я создал камеру с матрицей и использовал ее для перемещения точки обзора в 2D.По сути, я начал с этого шаблона: http://torshall.se/?p=272

У меня также был в одном из моих классов простой код для создания блоков мышью:

public void CreateBodies()
    {
        mouse = Mouse.GetState();

        if (mouse.RightButton == ButtonState.Pressed)
        {
            Bodies += 1;
            if (Bodies >= MaxBodies)
                Bodies = 0;

            rectBody[Bodies] = BodyFactory.CreateRectangle(world, ConvertUnits.ToSimUnits(rectangle.Width), ConvertUnits.ToSimUnits(rectangle.Height), 1);
            rectBody[Bodies].Position = ConvertUnits.ToSimUnits(mouse.X, mouse.Y);
            rectBody[Bodies].BodyType = BodyType.Dynamic;
        }
    }

Это сработало отлично, но когдаЯ переместил «камеру», мышь не изменилась в нужном месте, потому что я сделал эту небольшую модификацию в game1.cs и в моем методе, чтобы получить координаты мира.моей мыши:

mouse = Mouse.GetState();
        Matrix inverse = Matrix.Invert(camera.transform);
        Vector2 mousePos = Vector2.Transform(new Vector2(mouse.X, mouse.Y), inverse);

        TE.CreateBodies(mousePos);


public void CreateBodies(Vector2 mousePosition)
    {
        mouse = Mouse.GetState();
        MousePosition = mousePosition;

        if (mouse.RightButton == ButtonState.Pressed)
        {
            Bodies += 1;

            if (Bodies >= MaxBodies)
            {
                Bodies = 0;
            }

            rectBody[Bodies] = BodyFactory.CreateRectangle(world, ConvertUnits.ToSimUnits(rectangle.Width), ConvertUnits.ToSimUnits(rectangle.Height), 1);
            rectBody[Bodies].BodyType = BodyType.Dynamic;

            rectBody[Bodies].Position = ConvertUnits.ToSimUnits(MousePosition);


        }

    }

Теперь это должно дать мне мировые координаты.моей мыши, но у меня есть проблема, когда я запускаю программу и нажимаю где-нибудь на экране, чтобы создать окно, я получаю эту ошибку:

http://img68.xooimage.com/files/6/a/4/bob-2c526f4.png

Что происходит?: /

Редактировать:

Это строка 439 body.cs:

Debug.Assert(!float.IsNaN(value.X) && !float.IsNaN(value.Y));
...