提问者:小点点

绘制Graphics2D的特定部分


我写了一个游戏,现在我想学习如何操作相机。

我的画是这样的:

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的图形部分。

那么,我该如何将图形2D并将其移到指定的值上呢?如果这个问题已经得到回答或很容易,我很抱歉,但我是新手,真的需要一些帮助。

事先感谢您的帮助。我已经尝试了我所知道的一切,但没有成功。


共2个答案

匿名用户

那么,我该如何获取Graphics2D并将其转移到指定的值上呢?

为什么必须移动Graphics2D?为什么不创建一个超出视口的图像,并简单地移动视口。然后,如果用户靠近视口的边缘,将图像添加到前缘并删除后缘的一部分。

匿名用户

这就是仿射变换的作用。

http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/geom/AffineTransform.html

通过应用shift将字符移动到屏幕中心。

在您的绘图组件中,保存当前的转换。创建一个新的转换,然后将屏幕移动到您希望的位置。设置图形2D以使用您的新转换。在原始坐标处绘制字符设置图形2D以使用原始转换。