AWT图形无法正确翻译

问题描述 投票:0回答:1

我正在制作一个简单的2D游戏,我想用鼠标移动相机。我敢肯定,有很多更好的方法可以做到这一点,但是我决定尝试使用Graphics2D方法setTransform()

AffineTransform at = new AffineTransform();
at.translate(mousex, 0);

Graphics2D g2d = (Graphics2D)g.create();
g2d.setTransform(at);

但是,如下面的图像所示,图形不能用鼠标线性转换。对于前几个像素,它似乎可以正确移动,但是稍后放慢速度

顺便说一下,鼠标用蓝色圆圈表示。

enter image description here

enter image description here

[当鼠标靠近框的边缘时,图形几乎向右线性移动。当鼠标进一步向右拖动时,图形会随之移动,但会有某种滞后(不应该)]

块周围的白色边框代表应移动的图形的轮廓。

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

import javax.swing.*;

public class Bruh extends JPanel implements MouseMotionListener
{
    int mousex = 0;

    public static void main(String[] args) {
        JFrame f = new JFrame();

        f.setSize(500, 500);
        f.setLocationRelativeTo(null);

        f.setUndecorated(true);

        f.add(new Bruh());

        f.setVisible(true);
    }

    Bruh()
    {
        setBackground(Color.ORANGE);

        addMouseMotionListener(this);
    }

    @Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        AffineTransform at = new AffineTransform();
        at.translate(mousex, 0);

        Graphics2D g2d = (Graphics2D)g.create();
        g2d.setTransform(at);

        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 100, 100, 100);

        g2d.dispose();

        g.setColor(Color.BLUE);
        g.fillOval(mousex-5, 200-5, 10, 10);

        repaint();
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        mousex = e.getX();
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        mousex = e.getX();
    }
}

TL; DR

Graphics2D的setTransform(AffineTransform at)功能无法正常工作。任何帮助表示赞赏:)

java swing graphics awt graphics2d
1个回答
0
投票

好,所以我得到了答案。问题不在我的代码中,也不在我的触摸板滚动中。

在我的笔记本电脑上,我已将显示器的缩放比例设置为125%,除了使用默认缩放比例的应用程序-Java是其中之一以外,其他所有功能均正常运行。

问题是我的鼠标正确移动(因为这是鼠标所做的),但是Java的内置图形正在响应显示器的默认缩放比例,即125%。因此,所有部件的移动速度比预期的慢1.25倍。

© www.soinside.com 2019 - 2024. All rights reserved.