Я создал камеру с матрицей и использовал ее для перемещения точки обзора в 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));