рендеринг карт спрайтов java

1

У меня есть класс, который расширяет Canvas, это мой конструктор:

public Game() {
        JFrame frame = new JFrame("Game");

        JPanel panel = (JPanel) frame.getContentPane();
        panel.setPreferredSize(new Dimension(1000, 600));
        panel.setLayout(new FlowLayout());

        setBounds(0, 0, 1000, 600);
        setIgnoreRepaint(true);

        frame.add(this);


        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        setFocusable(true);
        addKeyListener(this);

        try {
            img = ImageIO.read(getClass().getClassLoader().getResource("img.png"));
        } catch (IOException e) {
            System.out.println(e);
        }

    }

Это петля

try {
    this.repaint();
    Thread.sleep(17);
} catch (InterruptedException e) {
    e.printStackTrace();
}

и метод окраски

super.paint(g);
for (int i = 0; i < map.length; i++) {
    for (int j = 0; j < map[0].length; j++) {
        Tile current = map[i][j];
        g.drawImage(img, i * 32, j * 32, this);
    }
}

Это нормально, но, обновляя каждые 17 миллисекунд, это просто как отставание. Я вижу, как он очищается и рисует каждый раз. Как исправить это "fps drop" или что-то еще?

  • 0
    Если вы используете Canvas, вы должны использовать BufferStrategy вместо перезаписи краски. Визуализируйте свою карту тайлов прямо в BufferedImage и закрасьте ее.
Теги:

1 ответ

0
Лучший ответ

Если вы используете java.awt.Canvas, вы должны рисовать, используя java.awt.image.BufferStrategy вместо переопределения paint.

Canvas не используется с двойной буферизацией, но точка использования Canvas - это доступ к BufferStrategy, который обеспечивает возможности двойной буферизации, активное управление рисованием и более тесный доступ к оборудованию.

Вместо того, чтобы перерисовывать всю карту на каждом цикле краски, вы должны отобразить карту плитки в BufferedImage и нарисовать изображение вместо

  • 0
    Спасибо, я постараюсь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню