Графика AWT не переводится правильно - PullRequest
0 голосов
/ 03 февраля 2020

Я делаю простую 2-D игру, для которой я бы хотел двигать камеру мышью. Я уверен, что существует множество способов сделать это лучше, но я решил попробовать метод 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

Функция setTransform(AffineTransform at) Graphics2D не работает должным образом. Любая помощь приветствуется:)

1 Ответ

2 голосов
/ 03 февраля 2020

Хорошо, я получил ответ. Проблема не в моем коде или прокрутке сенсорной панели.

На своем ноутбуке я установил масштабирование экрана на 125%, заставляя все работать нормально, КРОМЕ приложений, использующих масштабирование по умолчанию - Java является одним из них.

Проблема заключалась в том, что моя мышь двигалась правильно (потому что так делают мыши), но встроенная графика java реагировала на масштабирование дисплея по умолчанию, т.е. 125% , Так что все двигалось в 1,25 раза медленнее, чем ожидалось.

...