AWT 图形未正确翻译

Posted

技术标签:

【中文标题】AWT 图形未正确翻译【英文标题】:AWT Graphics not Translating Correctly 【发布时间】:2020-05-18 22:05:57 【问题描述】:

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

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

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

但是,如下图所示,图形不会随着鼠标线性平移。对于前几个像素,它似乎可以正确移动,但它稍后会变慢

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

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

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

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) 功能未按预期工作。任何帮助表示赞赏:)

【问题讨论】:

如需更好的帮助,请edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。替换数据库的硬编码数据。 @AndrewThompson 你说得对,这只是我提出问题的最快方法。我会尽快更新问题 @user85421 我在我的原始程序中这样做了,但一定忘了在这里添加它。谢谢! 发布的代码对我来说效果很好 - 蓝点始终位于白色方块的左下角,并且完全符合预期(仅限水平位置) “有什么办法可以解决这个问题吗?” 我希望如此,但我无法贡献任何有价值的东西。我不使用笔记本电脑,并且不熟悉其中的复杂性。一切顺利。如果您在 2 天内没有得到解决方案,请标记我,我可能会添加赏金。哦,有一件事,检查你有没有最新的显卡驱动程序。我怀疑这就是问题所在,但这样做已经设法解决了其他一些视觉问题。 【参考方案1】:

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

在我的笔记本电脑上,我将显示器的缩放比例设置为 125%,从而使一切正常工作,除了使用默认缩放的应用程序 - Java 就是其中之一。

问题是我的鼠标移动正确(因为这是鼠标所做的),但 java 的内置图形响应显示的默认缩放比例,即 125%。所以一切都比预期慢 1.25 倍。

【讨论】:

以上是关于AWT 图形未正确翻译的主要内容,如果未能解决你的问题,请参考以下文章

Java Swing 图形故障?

如何更改 AWT 标签字体

图形界面

图形界面设计

Java AWT 图形界面编程AWT 简介 ( AWT 核心类继承体系 )

Java AWT 图形界面编程Container 容器总结