[英]Moving object 2d with viewmatrix
我正在开发一个基于ww2军队运动的小型游戏。 我第一次开始用相机环顾四周,然后我写了一个程序,慢慢地移动一个排在我点击的排,然后停在那里。 在那里UNTIL一切都很好,但后来我试图让它工作,同时移动相机,所以矩阵不是标准矩阵。 我没有把排的位置推到正确的位置去工作。 如果有人能告诉我我要做些什么才能让它发挥作用,我将不胜感激
搬家代码:
public void Update(MouseState mouse, GameTime gameTime,Matrix matrix)
{
if (mouse.LeftButton == ButtonState.Pressed)
{
mousePos = new Vector2(mouse.X, mouse.Y);
Vector2.Transform(mousePos, matrix);
oldPos = testObjPos;
Vector2.Transform(oldPos, matrix);
Difference = mousePos - oldPos;
Difference.Normalize();
}
testObjPos += Difference * (float)gameTime.ElapsedGameTime.TotalSeconds * 20;
if (testObjPos.X > mousePos.X - 1 && testObjPos.X < mousePos.X + 1 &&
testObjPos.Y > mousePos.Y - 1 && testObjPos.Y < mousePos.Y + 1)
Difference = new Vector2(0, 0);
}
也许我的相机类是Camera COde的问题
float moveSpeed = 300;
Vector2 position;
Matrix viewMatrix;
int screenwidth, screenheight;
public void Update(KeyboardState keyState, GameTime gameTime)
{
if (keyState.IsKeyDown(Keys.W))
position.Y -= moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
if (keyState.IsKeyDown(Keys.S))
position.Y += moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
if (keyState.IsKeyDown(Keys.A))
position.X -= moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
if (keyState.IsKeyDown(Keys.D))
position.X += moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
if (position.X < -1000)
position.X = -1000;
if (position.Y < -1000)
position.Y = -1000;
if (position.X > 1000)
position.X = 1000;
if (position.Y > 1000)
position.Y = 1000;
viewMatrix = Matrix.CreateTranslation(new Vector3(-position, 0));
}
感谢您抽出时间仔细研究它。
我假设matrix
是你的视图矩阵。 该矩阵用于将位置从世界空间转换为相机空间。
您的鼠标位置在视图空间中,并且您希望将其转换为世界空间,因此以另一种方式。 因此,您需要matrix
的逆。 此外, Vector2.Transform()
方法返回变换后的矢量。 它不会改变原来的。 所以现在,你不使用任何转换的位置:
var invMatrix = Matrix.Invert(matrix);
mousePos = Vector2.Transform(mousePos, invMatrix);
您可能不希望转换oldPos,因为它已经存在于世界空间中(可能,我无法从代码片段中确切地说出来)。
顺便说一句,有一种更简单的方法来检查testObjPos
是否接近mousePos
。 只需检查差异向量的长度:
if((testObjPos - mousePos).Length() < 1)
//stop
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.