要么我的咖啡还没有开始,或者我在大学时没有给予足够的重视,无论哪种方式,我都无法绕着正确的方式进行计算。
我有一个由区域组成的迷宫,玩家一次只能看到一个区域。目前相机保持在播放器的中心位置,因此当它们接近区域的边缘时,我们看到每一个不断膨胀的黑色,因为那里什么都没有。当玩家接近区域的调整时,我希望相机的中心保持静止。
这是我到目前为止的代码:
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)));
}
我相信解决这个问题所需的一切如上所示:
cellSize
是每个单元格的像素大小
zoneSize
是每个区域中的单元格数(宽度和高度)
this.Size
会返回可见像素
cellSize * zoneSize
将返回区域使用的总像素数(宽度和高度)。
目前有一个if
语句用于调整一个部分center.X
,我计划再做3个。但我无法让那个人工作。我尝试过几件事。任何帮助将不胜感激。
答案 0 :(得分:0)
咖啡开了。这就是我的工作:
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;
}
如果有人可以发布更好的答案(更少if
语句,更优雅等等),那不仅仅是对上述代码的重写,在接下来的几天里,我会很乐意将其标记为答案。