Java Swing Graphics2d вращение прыжков - PullRequest
2 голосов
/ 07 апреля 2019

Я пишу простую игру для изучения целей. Все идет хорошо, кроме одной мелочи ...

Я не могу понять, как вращать квадрат без этого ужасного прыжка

enter image description here

здесь упрощенная версия моей программы, иллюстрирующая проблему, здесь я использую один таймер, но в оригинальной программе у меня есть 2 таймера, один для управления состоянием игры и второй для перерисовки:

public class soQuestion extends JLabel {

    double r;

    @Override
    public void paintComponent(Graphics g1) {
        Graphics2D g = (Graphics2D) g1;
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                RenderingHints.VALUE_INTERPOLATION_BICUBIC);
        g.setRenderingHint(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);
        g.clearRect(0,0, getWidth(), getHeight());
        g.translate(getWidth()/2, getHeight()/2);
        g.rotate(r);
        g.translate(-20, -20);
        g.fillRect(0, 0, 40, 40);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        soQuestion question = new soQuestion();
        frame.add(question);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        new javax.swing.Timer(10, new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                r += 0.005;
                question.repaint();
            }
        }).start();
    }
}

прыжки более заметны, если значения дельты вращения малы, для быстро вращающихся объектов менее заметны.

все подсказки рендеринга, которые я использовал, не действуют

PS: простите за мой английский

PPS: при необходимости могу предоставить больше деталей, как это выглядит в полной версии:

enter image description here

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Спасибо всем участникам!

Это полностью моя ошибка и невнимательность . Я скопировал этот фрагмент кода из какого-то источника:

g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

И прежде чем задать здесь вопрос, я не увидел, что использовал подсказку, связанную с отображением текста.

Особая благодарность г-ну @Pshemo за предложение использовать этот совет по рендерингу:

g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

Я знал об этом, прежде чем спрашивать, но я человек и не мог понять, где ошибаться, в течение часа и спросил.

PS: простите за мой английский

0 голосов
/ 07 апреля 2019

Я новый участник, так что если это не лучшая помощь, извините, но я пытаюсь:)

вы пробовали решение, в котором вы используете Math.toRadiants () в вашей функции g.rotate ()? в этом видео: Java: вращение и масштабирование изображений изображение вращается без прыжка, это в 6:42 в видео.

Итак, в вашем решении это будет выглядеть так: g.rotate(Math.toRadiants(r += 0.005));

...