移动播放器时更改鼠标位置

时间:2018-03-31 23:53:06

标签: xna monogame

我已将相机设置在我的播放器后面,但我遇到了问题。

当我的玩家移动时,矢量会明显改变,但不会改变我的鼠标位置。

我必须计算我射击子弹和方向的鼠标角度,所以如果我的鼠标位置不变,但我的矢量确实变得非常奇怪。

即使在互联网上搜索,也真的不知道该怎么做。

拍摄时的代码:

                v.X = (float)Math.Sqrt((5 * 5) / (1 + ((dy * dy) / (dx * dx))));
                v.Y = (float)Math.Sqrt(5 * 5 - v.X * v.X);
                if(Mouse.GetState().X > vector.X && Mouse.GetState().Y > vector.Y )
                {
                    bullets.Add(new Bullet(bulletTexture, vector.X, vector.Y, v.X, v.Y, 1));
                }
                if (Mouse.GetState().X < vector.X && Mouse.GetState().Y > vector.Y)
                {
                    bullets.Add(new Bullet(bulletTexture, vector.X, vector.Y, -v.X, v.Y, 1));
                }
                if (Mouse.GetState().X > vector.X && Mouse.GetState().Y < vector.Y)
                {
                    bullets.Add(new Bullet(bulletTexture, vector.X, vector.Y, v.X, -v.Y, 1));
                }
                if (Mouse.GetState().X < vector.X && Mouse.GetState().Y < vector.Y)
                {
                    bullets.Add(new Bullet(bulletTexture, vector.X, vector.Y, -v.X, -v.Y, 1));
                }

玩家面对鼠标射击的地方:

 mosAngle = (float)Math.Atan((Mouse.GetState().Y - vector.Y )    / (Mouse.GetState().X - vector.X));
        if(Mouse.GetState().LeftButton == ButtonState.Pressed)
        {         
            if (Mouse.GetState().Y < vector.Y && Math.Abs(mosAngle) > Math.PI / 4)
            {
                texture = backAnim;                
            }
            else if (Mouse.GetState().Y > vector.Y && Math.Abs(mosAngle) > Math.PI / 4)
            {
                texture = frontAnim;             
            }
            else if (Mouse.GetState().X > vector.X)
            {
                texture = rightAnim;          
            }
            else
            {
                texture = leftAnim;   
            }

相机类:

class Camera 
{
    private Matrix transform;
    private Viewport view;
    private Vector2 centre, camPos;
    public Matrix Transform
    {
        get { return transform; }
    }

    public Camera(Viewport view) 
    {
        this.view = view;
    }

    public void Update(GameTime gameTime)
    {
        KeyboardState keyboardState = Keyboard.GetState();
        if (keyboardState.IsKeyDown(Keys.D))
        {
            camPos.X += 2f;

        }
        if (keyboardState.IsKeyDown(Keys.A))
        {
            camPos.X -= 2f;

        }
        if (keyboardState.IsKeyDown(Keys.W))
        {
            camPos.Y -= 4f;

        }
        if (keyboardState.IsKeyDown(Keys.S))
        {
            camPos.Y += 4f;

        }
        centre = new Vector2(camPos.X, camPos.Y);
        transform = Matrix.CreateScale(new Vector3(1, 1, 0)) * Matrix.CreateTranslation(new Vector3(-centre.X, -centre.Y, 0));
    }

我不确定我应该做些什么来拍摄代码并面向玩家射击工作的相同方向。

1 个答案:

答案 0 :(得分:1)

  

当我的玩家移动时,矢量会明显改变,但不会改变我的鼠标位置。

这是因为鼠标位置始终是窗口内的位置,而不是像游戏世界中的玩家一样。

所以你需要处理两个不同的位置,比如mouseWindowPosition(你可以通过添加mouseWindowPosition和你的相机位置来获得mouseState和mouseWorldPosition。