【问题标题】:Camera to follow player but 'snap' to screen boarders相机跟随玩家但“捕捉”到屏幕边框
【发布时间】:2013-04-05 20:01:46
【问题描述】:

我正在尝试为 Jumping Platformer 示例创建一个相机类。 Link Here

我只是不明白如何让相机跟随玩家的“球”。我知道瓷砖始终在屏幕上,但我想扩展地图 X、Y 并在您导航世界时使用相机跟随玩家。

如果有人可以查看教程,并向我解释如何添加相机类,我将非常感谢。 (XNA 新手)

【问题讨论】:

  • 您需要开始或显示一些代码。你不能指望人们观看视频来帮助你..
  • 我不知道从哪里开始,也不知道该给你看什么。没有那么多代码。有一个下载链接,如果您愿意下载示例并查看一下..?
  • 我添加了一个运行良好且很小的答案,但是您指出的示例有一个您可以查看的源代码。它可能包含的内容超出了您的要求,但也许下次您可以实际下载它并自己查找并尝试,并在您尝试过但不理解时发布问题。

标签: c# xna


【解决方案1】:

简单。它可能会更容易完成,但这是一般的想法:

这是“X”坐标的简单方法。以后也可以为 Y 坐标复制,但是,它可以做得更简单。但这是为了展示整个过程。您可以只使用 Math.Max(Math.Min()) 并以更短的形式计算这些值,但这可行。

您可以在此处查看完整的源代码: http://pastebin.com/G969mz0f

将需要一个纹理文件“播放器”,您必须删除“Program.cs”,因为我将它们全部放在一个文件中。

public void Move(float x, float y, Camera2D Camera)
{

    Position.X += x;

    if ((Position.X < Camera.Min.X))
       Position.X = Camera.Min.X;

    if ((Position.X + Width) > Camera.Max.X)
       Position.X = Camera.Max.X - Width;

    float centerX = Position.X + (Width / 2);

    if (centerX > (Camera.Min.X + (ScreenDimension.X / 2)))
    {
        if (centerX < (Camera.Max.X - (ScreenDimension.X / 2)))
        {
            Camera.Move(-x, 0);
        }
        else
        {
            Camera.SetPosition(-(Camera.Max.X - ScreenDimension.X), Camera.Position.Y);
        }
    }
    else
    {
        Camera.SetPosition(Camera.Min.X, Camera.Position.Y);
    }

    // Removed Y because of code length

}

【讨论】:

  • 难道不能用 MathHelper.Clamp() 更简洁吗?
  • 当然这可以做得更容易,但了解它的工作原理也很好。你在任何数学中如何计算极限。这也是一个解决方案(对于相机的 X 坐标): position.X = (MathHelper.Clamp(x - (ScreenDimensions.X / 2f), Min.X, Max.X - ScreenDimensions.X));然后您改为在转换矩阵中使用 -Position.X。 Matrix.CreateTranslation(-Position.X, -Position.Y, 0);我将方法称为“CenterTo”,如果相机不能以对象为中心,它将使用它的边界。
猜你喜欢
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 2014-02-09
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多