所以我和一个朋友想要制作一个侧面滚轮,但我们遇到了相机问题。我们如何制作一款能够跟随播放器而不是硬滚动而非软滚动的相机。我的意思是,只有当玩家移动到窗口上的某个位置时,相机才会移动。我们使用java来编写代码,但我认为只要它有相同的概念,任何语言都可以提供帮助。
答案 0 :(得分: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
}