Graphics2D.scale()在调整游戏窗口java2D的大小时不会按比例保存对象的位置

时间:2018-08-17 17:44:54

标签: java window scale java-2d

我正在使用Java2D构建游戏,并且我希望该游戏能够将游戏窗口屏幕调整为不同的大小。 该游戏的世界地图大于实际屏幕,因此我还从Java2D库中添加了翻译方法。 一切正常,但是当我在屏幕上添加某些内容(例如绘制矩形)时,会将其添加到其他位置,但是宽度和高度正确,只有对象位置错误,并且在播放器移动时会发生变化,其工作原理正确地使用基本分辨率(1280x720),但是当我调整屏幕大小时,出现了我提到的问题。 有什么建议吗?

这是我的代码:

private void render() {
    Toolkit.getDefaultToolkit().sync();
    BufferStrategy bs = this.getBufferStrategy();
    if (bs == null) {
        this.createBufferStrategy(3);
        return;
    }
    Graphics2D g = (Graphics2D)bs.getDrawGraphics();
    g.setBackground(Color.white);

    g.translate(-Camera.getxPosition(),-Camera.getyPosition());

    scaleScreen(g);

    ObjectHandler.render(g);

    g.translate(Camera.getxPosition(),Camera.getyPosition());

    g.setColor(Color.gray);

    g.fillRect(100,100,100,100);

    g.dispose();
    bs.show();
}

private void scaleScreen(Graphics2D g){
    int standardWidth = 1280;
    int standardHeight = 720;
    int screenWidth = 1920, screenHeight = 1080;

    g.scale(1.0 * screenWidth / standardWidth, 1.0 * screenHeight / standardHeight);
}

我在这里只添加了我的render方法和scale方法,因为其他代码无关。

on base screen 1280x720 works propertly

on 1920x1080 screen

on 1600x900 screen

0 个答案:

没有答案