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,但基本上是一样的