我写了一个游戏,现在我想学习如何操作相机。
我的绘画包括:
private void render()
{
// CREATE THE GRAPHICS
Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics();
// MAKE THE PICTURE WHERE WE WILL PAINT EVERYTHING AT ONCE
g.clearRect(0, 0, WIDTH, HEIGHT);
// PAINT ANYTHING WE NEED HERE
render(g);
g.dispose();
// SHOW THE WHOLE IMAGE RATHER THAN PAININT ONE OBJECT AT A TIME
bufferStrategy.show();
}
我的BufferStrategy创建如下:
canvas = new Canvas();
// once again I add 1 because java is stupid that's why
canvas.setBounds(0, 0, WIDTH+1, HEIGHT+1);
//canvas.setBounds(bounds);
canvas.setIgnoreRepaint(true);
// SET GRAPHICS DEVICE
canvas.createBufferStrategy(2);
bufferStrategy = canvas.getBufferStrategy();
在渲染功能中,我用他们应该拥有的所有平台绘制我的游戏世界。现在,如果游戏世界大于窗口大小,我希望能够专注于角色并绘制角色所在世界的一部分,我该怎么做?所以假设我的窗口是300 x 300,我的游戏世界是900 x 900,我的角色位于中间,所以我想显示图形的一部分,其中x是150 y是150,宽度和高度是300 x 300。
那么我将如何获取Graphics2D并将其转换为指定的值?如果这个问题得到解答或者很容易,我很抱歉,但我是新手,真的希望得到一些帮助。
提前感谢您的帮助。 我尝试了所有我知道的无济于事。
答案 0 :(得分:2)
那么我将如何获取Graphics2D并将其移出指定的值?
为什么要转移Graphics2D?为什么不创建一个超出视口的图像,只需移动视口。然后,如果用户靠近视口的边缘,则将图像添加到前缘并截掉后缘上的一部分。
答案 1 :(得分:1)
这就是仿射变换的用途。
http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/geom/AffineTransform.html
通过应用班次将角色移动到屏幕中心。
在paint组件中,保存当前转换。 创建一个新的转换,然后将屏幕移动到您希望的位置。 设置Graphics2D以使用您的新转换。 在原始坐标处绘制角色 设置Graphics2D以使用原始转换。