我们正在为WP7开发一个实时策略变体。目前,我们需要一些关于如何建立一个有效的摄像系统的指导/指导。换句话说,我们想要一个可以在平面上平移的相机(二维或三维水平图)。我们一直在试验二维瓷砖地图,而我们的单位/角色都是三维模型。
乍一看,我们似乎需要弄清楚如何计算相机周围的边界框及其整个视图透视图。或者,将相机的移动限制在它所能看到的范围内,限制在2d贴图的边界内。
任何帮助都将不胜感激!!
干杯
如果你正在进行真正的2D滚动,它非常简单:
- Scroll.X必须介于0和level.width-screen.width之间
- 滚动。Y必须在0和级别之间。高度-屏幕高度
(使用MathHelper.Clamp
帮助您)
至于3D,它有点棘手,但原理几乎相同。
你真正需要的是定义两个Vector3
点,一个是左下角,另一个是右上角(或者你可以做左上角/右下角等,由你决定)。这些将是您的边界值。
第一个可以定义为只有常数值的readonly
,可以根据需要调整相机边界。有一种计算方法,但老实说,我更喜欢有更多的控制权,所以我通常会选择价值调整的路线。
第二个你可以从一个"基础"开始,你可以像以前一样手动调整(或计算),但这次你必须添加地图的宽度和长度(到X和Z),这样你就知道了真正的边界,这取决于你加载的地图。
一旦你有了这些值,就和以前一样钳制它们:
//pans the camera but caps at bounds
public void ScrollByCheckBounds(Vector3 scroll, Vector3 bottomLeftFront, Vector3 topRightBack)
{
Vector3 newScroll = Scroll + scroll;
//clamp each dimension
newScroll.X = MathHelper.Clamp(newScroll.X, topRightBack.X, bottomLeftFront.X);
newScroll.Y = MathHelper.Clamp(newScroll.Y, topRightBack.Y, bottomLeftFront.Y);
newScroll.Z = MathHelper.Clamp(newScroll.Z, bottomLeftFront.Z, topRightBack.Z);
Scroll = newScroll;
}