Я делаю простую 2-D игру, для которой я бы хотел двигать камеру мышью. Я уверен, что существует множество способов сделать это лучше, но я решил попробовать метод Graphics2D setTransform()
.
AffineTransform at = new AffineTransform();
at.translate(mousex, 0);
Graphics2D g2d = (Graphics2D)g.create();
g2d.setTransform(at);
Однако графика не переводится линейно с помощью мыши, как вы можете видеть на изображениях ниже. Для первых нескольких пикселей он, кажется, движется правильно, но он вроде замедляется позже ?
Кстати, мышь обозначена синим кружком.
![enter image description here](https://i.stack.imgur.com/8fgje.png)
![enter image description here](https://i.stack.imgur.com/vwYOn.png)
Когда мышь находится рядом с краем кадра, графика перемещается почти линейно с ней к вправо.
Когда мышь перетаскивают дальше вправо, графика перемещается вместе с ней, но с некоторой задержкой (не следует)
Белая рамка вокруг блоков представляет контур контура графика, которая должна двигаться.
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
Функция setTransform(AffineTransform at)
Graphics2D не работает должным образом. Любая помощь приветствуется:)