Java Awt & Swing программа работает на скорости 2 кадра в секунду, почему? - PullRequest
0 голосов
/ 07 октября 2018

Когда я запускаю этот код, квадрат реагирует так медленно, как будто программа работала со скоростью 2 кадра в секунду.Можете ли вы сказать мне, почему это так медленно и как я могу заставить его работать быстрее?Кроме того, я скажу, что я использовал для кодирования в Pygame (Python) и была система, которая позволила мне установить FPS, но я не могу найти ничего подобного в Java, если вы могли бы показать мне, как установить FPS, я быблагодарен.

Спасибо за ответ.

package World;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferStrategy;

public class Map {
    private final String title = "The Lord of the Dungeon";
    private final int width = 1600;
    private final int height = width / 16 * 9;
    private Player player = new Player(width / 2, height / 2, 50);
    //class Player contains only: int x, int y, int width, int height
    public Map () {
        //generate map
    }
    public void draw () {
        boolean running = true;

        //Creating the frame.
        JFrame frame = new JFrame(title);
        frame.setSize(width, height);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setVisible(true);

        //Creating the canvas.
        Canvas canvas = new Canvas();
        canvas.setSize(width, height);
        canvas.setBackground(Color.BLACK);
        canvas.setVisible(true);
        frame.add(canvas);
        canvas.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent keyEvent) {

            }

            @Override
            public void keyPressed(KeyEvent keyEvent) {
                int keyCode = keyEvent.getKeyCode();
                if (keyCode == KeyEvent.VK_W) {
                    player.setY(player.getY() - 10);
                }
                else if (keyCode == KeyEvent.VK_A) {
                    player.setX(player.getX() - 10);
                }
                else if (keyCode == KeyEvent.VK_S) {
                    player.setY(player.getY() + 10);
                }
                else if (keyCode == KeyEvent.VK_D) {
                    player.setX(player.getX() + 10);
                }
            }

            @Override
            public void keyReleased(KeyEvent keyEvent) {

            }
        });
        canvas.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent mouseEvent) {

            }

            @Override
            public void mousePressed(MouseEvent mouseEvent) {
                int mouseCode = mouseEvent.getButton();
                if (mouseCode == 1) {
                    System.out.println("1");
                }
            }

            @Override
            public void mouseReleased(MouseEvent mouseEvent) {

            }

            @Override
            public void mouseEntered(MouseEvent mouseEvent) {

            }

            @Override
            public void mouseExited(MouseEvent mouseEvent) {

            }
        });


        canvas.createBufferStrategy(3);
        BufferStrategy bufferStrategy;
        Graphics graphics;

        while (running) {
            bufferStrategy = canvas.getBufferStrategy();
            graphics = bufferStrategy.getDrawGraphics();
            graphics.clearRect(0, 0, width, height);

            graphics.fillRect(player.getX(), player.getY(), player.getWidth(), player.getHeight());


            bufferStrategy.show();
            graphics.dispose();
        }
    }
}

вот класс игрока:

public class Player {
    private int x;
    private int y;
    private int width;
    private int height;
    public Player (int x, int y, int width) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = width / 9 * 16;
    }
    public int getX () {
        return this.x;
    }
    public int getY () {
        return this.y;
    }
    public int getWidth () {
        return this.width;
    }
    public int getHeight () {
        return this.height;
    }
    public void setX (int newX) {
        this.x = newX;
    }
    public void setY (int newY) {
        this.y = newY;
    }
    public void setWidth (int newWidth) {
        this.width = newWidth;
        this.height = newWidth / 9 * 16;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...