相机抖动矩阵相机

时间:2014-03-18 13:53:44

标签: c# matrix xna velocity perspectivecamera

我正在使用翻译矩阵来移动屏幕但是当玩家与对象发生碰撞时,玩家将会抖动,就好像它想要同时在2个地方一样。看起来速度想要在块推动时保持下降,我将如何解决这个问题?

视频:Here

相机类:

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;
    }
}

我尝试通过添加播放器goingUp和ground if语句来修复此问题,但这没有帮助。

2 个答案:

答案 0 :(得分:1)

我解决了。这是关于操作的顺序。只需移动方法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);

说明:在完成所有碰撞后,您必须设置摄像机位置。

答案 1 :(得分:0)

当你站在某个物体上时,我能看到什么,速度变化。所以尝试将相机位置转换为整数。或者如果接近0则使速度精确为0.

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