【问题标题】:Camera Jitters Matrix Camera相机抖动矩阵相机
【发布时间】:2014-03-18 13:53:43
【问题描述】:

我正在使用平移矩阵来移动屏幕,但是当玩家与一个物体发生碰撞时,玩家会抖动,就好像它想同时在两个地方一样。看起来速度想继续下降,而块将其推高,我该如何解决这个问题?

视频: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;
    }
}

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

【问题讨论】:

  • 如果你能分享这个项目,我会 100% 解决这个解决方案。 xD
  • @Wallstrider 我会测试 Davor 是否给了我正确的答案,然后我会尝试链接整个项目。如果您对我将如何做到这一点有任何想法,那将很有帮助。
  • 是的,因为我不知道您实际上是如何处理冲突的。唯一的相机对我来说不够用。
  • 如何显示所有代码?我应该把它放在哪个网站上?我应该将其压缩并放在某个地方并链接到它吗?
  • 您可以使用this site 上传包含您的解决方案的存档。下载后,如果您不希望有人窃取您的项目,您可以删除链接。我不会,因为我已经完成了我的 2D 游戏。

标签: c# matrix xna velocity perspectivecamera


【解决方案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);

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

【讨论】:

  • 我爱你,谢谢你的帮助。我应该看到的哈哈。
【解决方案2】:

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

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

【讨论】:

  • 如果我在靠近它的时候将速度精确地设为 0,它永远不会改变,我如何让玩家知道它在一个物体的顶部并且在空中?当玩家与物体碰撞时,它将速度设置为 0,但每帧都会增加速度以检查它是否在物体上,如果玩家在物体上,则玩家速度将设置为 0,否则速度将增加。
  • 在发生碰撞时设置一些标志 IsCollided 为 true,并在移动角色时将其设置回 false。
  • 感谢您的帮助,很抱歉您的答案未被选中。但是 Wallstrider 比你的方法更容易解决。
猜你喜欢
  • 1970-01-01
  • 2018-12-14
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
相关资源
最近更新 更多