相机抖动矩阵相机

本文关键字:相机 抖动 | 更新日期: 2023-09-27 17:50:44

我使用平移矩阵来移动屏幕,但是当玩家与对象碰撞时,玩家会抖动,就好像它想同时出现在两个地方一样。看起来速度想要一直往下,而物体把它往上推,我怎么修正这个呢?

视频:

相机类:

class Camera
{
    public Vector2 Position;
    Viewport viewPort;
    public Vector2 cameraBounds;
    public float wasGround;
    public Matrix Transform()
    {
        var translationMatrix = Matrix.CreateTranslation(new Vector3(-Position.X, -Position.Y, 0));
        return translationMatrix;
    }
    public Player thing(Player player)
    {
        cameraBounds.X = player.Position.X - Game1.offset.X;
        if (cameraBounds.X > 0)
            Position.X = player.Position.X - Game1.offset.X;
        else
            Position.X = 0;
        //Problem      
        cameraBounds.Y = player.Position.Y - Game1.offset.Y;
        if (cameraBounds.Y > 0)
        {
            Position.Y = player.Position.Y - Game1.offset.Y;
            if (player.goingUp == false && (wasGround != player.ground))
                Position.Y = player.ground - Game1.offset.Y;
            wasGround = player.ground;
        }
        else
            Position.Y = 0;

        return player;
    }
    public Camera(Viewport viewport)
    {
        viewPort = viewport;
    }
}

我试图通过添加player goingUp和ground if语句来解决问题,但这没有帮助。

相机抖动矩阵相机

我解决了。它是关于操作的顺序。只需按如下所示移动方法camera.thing():

            // TODO: Add your update logic here
        HandleInput(Keyboard.GetState());
        player.Update(gameTime);
        // delete from here
        Time += (float)gameTime.ElapsedGameTime.TotalSeconds;
        foreach (Block b in Blocks)
        {
            player = b.BlockCollision(player);
        }
        // place here
        camera.thing(player);

说明:你必须在所有碰撞完成后设置相机位置

当你站在某个物体上不动时,我看到的是速度变化。所以尝试将摄像机位置转换为整数。如果接近0,则使速度精确为0。

 cameraBounds.X = cInt(cameraBounds.X)
 cameraBounds.y = cInt(cameraBounds.y)