所以我和一个朋友想要制作一个横向卷轴,但我们遇到了相机问题。我们如何制作一个跟随玩家但不是硬滚动而是软滚动的相机。我的意思是,只有当玩家移动到窗口上的某个位置时,相机才会移动。我们正在使用 java 对此进行编码,但我认为任何语言都可以提供帮助,只要它具有相同的概念。
问问题
2197 次
1 回答
0
首先,您需要定义视口的大小(相机分辨率),为简单起见,我们假设相机视口是屏幕的大小,我们有一个 800*600 的屏幕。
接下来,您需要定义相机的最大和最小偏移量。假设您有一个大小为 1600*1200 的世界,最大偏移量将在 X 上为 800,在 Y 上为 600,最小偏移量在两个轴上为 0。确定偏移量的一般公式是:
offsetMaxX = WORLD_SIZE_X - VIEWPORT_SIZE_X
offsetMaxY = WORLD_SIZE_Y - VIEWPORT_SIZE_Y
offsetMinX = 0
offsetMinY = 0
现在,通过帧,您需要计算相机的实际位置。使玩家处于屏幕中央的位置。位置需要相对于玩家位置来计算。
camX = playerX - VIEWPORT_SIZE_X / 2
camY = playerY - VIEWPORT_SIZE_Y / 2
Don't forget to check if the camera position do not exceed the maximum and minimum offsets.
if camX > offsetMaxX:
camX = offsetMaxX
else if camX < offsetMinX:
camX = offsetMinX
Same is needed for Y axis.
现在您知道了相机的位置,您将把世界翻译到这个位置。当您打开一个普通窗口并开始绘制东西时,您看到的区域从 0,0 开始。要创建摄像机跟随玩家的错觉,您需要将绘图区域位置(示例中的屏幕)设置为摄像机位置。
我不知道您使用的是什么框架/引擎,但最简单的方法是将整个图形上下文转换为与当前偏移量相反的值。您将需要知道如何访问您的图形上下文并对其应用翻译。
在 slick2d 中,它可能如下所示:
public void render(..., Graphics c) {
g.translate(-cam.x, -cam.y)
//render the rest of your game
}
于 2013-09-16T03:50:22.433 回答