您可能正在寻找,是translate(x, y)
的,类的方法Graphics
。该方法在标准 Java Swing/AWTGraphics
类和 Slick2D 版本中都可用,因此请记住,这不是 Slick2D 特定的功能。
translate 所做的是移动所有未来绘图操作的原点。这是什么意思?好吧,请记住,原点通常位于 (0, 0)。因此,在位置 (40, 50) 绘制一个点将绘制到屏幕位置 (40, 50)。但是,translate()
移动此参考点,这反过来会影响所有其他绘图操作。
例如,这样做translate(50, 60)
会将原点在 x 轴上向右移动 50 个像素,在 y 轴上向下移动 60 个像素(因为在计算机程序员中,较大的 y 值在屏幕上较低)。然后,在 (40, 50) 处绘制一个点实际上会在 (40 + 50, 50 + 60) 或 (90, 110) 处绘制到屏幕上。这就是使用的力量translate()
。
完成绘图后,将原点移回 (0, 0) 通常是个好主意,否则事情可能会搞砸。但是,做translate(0, 0)
不会完成这项任务,实际上根本不会做任何事情。这是因为 translate 方法将原点移动到相对点。相反,只需确保每次通话translate(x, y)
,您都有另一个通话translate(-x, -y)
。这将防止原点失控。
如果您想使用此方法让相机跟随您的一个实体,请务必注意您要使用该实体位置的负值来平移原点。例如,用位置向量 'pos' 跟随玩家:
g.translate(-player.pos.x, -player.pos.y);
// Render everything
g.translate(player.pos.x, player.pos.y);
这是因为当玩家向右移动时,您希望背景向左移动,否则您将让所有东西都跟随玩家。