AWT 图形翻译不正确
AWT Graphics not Translating Correctly
我正在制作一个简单的 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)
功能未按预期运行。感谢您的帮助:)
好的,我得到了答案。问题不在我的代码中,也不在我的触摸板滚动中。
在我的笔记本电脑上,我将显示器的缩放比例设置为 125%,导致一切正常工作,除了使用默认缩放比例的应用程序 - Java 就是其中之一。
问题是我的鼠标移动正确(因为鼠标就是这样做的)但是 java 的内置图形响应显示的默认缩放比例,即 125%。所以一切都比预期慢了 1.25 倍。
我正在制作一个简单的 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)
功能未按预期运行。感谢您的帮助:)
好的,我得到了答案。问题不在我的代码中,也不在我的触摸板滚动中。
在我的笔记本电脑上,我将显示器的缩放比例设置为 125%,导致一切正常工作,除了使用默认缩放比例的应用程序 - Java 就是其中之一。
问题是我的鼠标移动正确(因为鼠标就是这样做的)但是 java 的内置图形响应显示的默认缩放比例,即 125%。所以一切都比预期慢了 1.25 倍。