Math 数学帮助-调整相机中心以保持屏幕上的图形

Math 数学帮助-调整相机中心以保持屏幕上的图形,math,geometry,Math,Geometry,要么是我的咖啡还没开始喝,要么是我在大学里没有给予足够的关注,不管怎样,我都无法正确地进行计算 我有一个由区域组成的迷宫,玩家一次只能看到一个区域。此时摄像机保持在玩家的中心位置,所以当他们接近区域边缘时,我们可以看到每一个不断扩大的黑度,因为那里什么也没有。我希望当球员接近调整区域时,摄像机的中心保持静止 这是我目前掌握的代码: private void ResetRenderView() { // Make sure this control always fills the par

要么是我的咖啡还没开始喝,要么是我在大学里没有给予足够的关注,不管怎样,我都无法正确地进行计算

我有一个由区域组成的迷宫,玩家一次只能看到一个区域。此时摄像机保持在玩家的中心位置,所以当他们接近区域边缘时,我们可以看到每一个不断扩大的黑度,因为那里什么也没有。我希望当球员接近调整区域时,摄像机的中心保持静止

这是我目前掌握的代码:

private void ResetRenderView()
{
    // Make sure this control always fills the parent
    this.Size = this.Parent.Size;

    //Calculate and correct CellSize so the screen can always be filled
    int zoneSize = DM.currentDungeon.Settings.ZoneSize;
    float minCellSize = (float)this.Size.Width / (float)zoneSize;
    if (cellSize < minCellSize + .5f) { cellSize = minCellSize + .5f; }

    //Calculate Center Point (usually on Player except when close to the edge)
    Vector2f center = new Vector2f(PlayerLocation.X * cellSize, PlayerLocation.Y * cellSize);
    /**** NEED HELP HERE ****/
    if (center.X < (this.Size.Width / 2) - ((zoneSize * cellSize) / 2)) { center.X = ((zoneSize * cellSize) / 2); }
    renderwindow.SetView(new SFML.Graphics.View(center, new Vector2f(this.Size.Width, this.Size.Height)));
}
private void ResetRenderView()
{
//确保此控件始终填充父控件
this.Size=this.Parent.Size;
//计算并校正单元格大小,以便始终填充屏幕
int zoneSize=DM.currentdundgeon.Settings.zoneSize;
float minCellSize=(float)this.Size.Width/(float)分区;
如果(cellSize
我相信解决这一问题所需的一切都如上图所示:

cellSize
是每个单元格的像素大小

zoneSize
是每个分区中的单元格数(宽度和高度)

this.Size
返回可视像素

cellSize*zoneSize
将返回分区使用的像素总数(宽度和高度)


目前有一个
if
语句用于调整一个零件
center.X
,我计划再做3个。但我不能让它工作。我试过几种方法。任何帮助都将不胜感激。

咖啡开始了。以下是我的工作:

    float totalSize = zoneSize * cellSize;
    if (center.X > totalSize - (this.Size.Width / 2))
    {
        center.X = totalSize - (this.Size.Width / 2);
    }
    if (center.X < this.Size.Width / 2)
    {
        center.X = this.Size.Width / 2;
    }
    if (center.Y > totalSize - (this.Size.Height / 2))
    {
        center.Y = totalSize - (this.Size.Height / 2);
    }
    if (center.Y < this.Size.Height / 2)
    {
        center.Y = this.Size.Height / 2;
    }
float totalSize=zoneSize*cellSize;
如果(center.X>totalSize-(this.Size.Width/2))
{
中心.X=总尺寸-(this.Size.Width/2);
}
如果(中心X总尺寸-(this.Size.Height/2))
{
center.Y=总尺寸-(this.Size.Height/2);
}
如果(中心Y

如果有人能给出一个更好的答案(更少的
If
语句,更优雅,等等),这不仅仅是对上述代码的重写,在接下来的几天里,我会很乐意将其标记为答案。

我通常只在Math.min中使用嵌套的Math.max,但基本上是一样的