Я просто пытаюсь запрограммировать игру в понг с очень хорошими манерами игры.В третьем классе я уже столкнулся с первой проблемой.
Вот мой код до сих пор:
Pong.java
package PongOO;
import javax.swing.*;
import java.awt.*;
public class Pong {
public static final int AREA_WIDTH = 700;
public static final int AREA_HEIGHT = 700;
public Pong() {
}
public void start() {
JFrame guiFrame = new JFrame("Pong");
PongPanel panel = new PongPanel();
guiFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
guiFrame.setLayout(new BorderLayout());
guiFrame.setSize(AREA_WIDTH, AREA_HEIGHT);
guiFrame.add(panel, BorderLayout.CENTER);
guiFrame.setLocationRelativeTo(null);
guiFrame.setVisible(true);
}
public static void main(String[] args) {
Pong pong = new Pong();
pong.start();
}
}
PongPanel.java
package PongOO;
import javax.swing.*;
import java.awt.*;
public class PongPanel extends JPanel {
private Renderer renderer;
public PongPanel() {
initPanel();
this.renderer = new Renderer();
}
private void initPanel() {
this.setSize(Pong.AREA_WIDTH,Pong.AREA_HEIGHT);
this.setBackground(Color.BLACK);
}
@Override
public void paintComponent(Graphics g) {
//renderer.drawBackground(g);
//renderer.drawField(g);
}
}
Renderer.java
package PongOO;
import java.awt.*;
public class Renderer {
public Renderer() {
}
public void drawBackground(Graphics g) {
//draw background
//need original size of JFrame with
//frame.getContentPane().getWidth();
}
public void drawField(Graphics g) {
}
}
Прежде всего, кажется ли это хорошим до сих пор?Не уверен, стоит ли мне определять Jframe как частное свойство или просто разрешить его в конструкторе таким, какой он есть сейчас?
Моя настоящая проблема заключается в том, что я хочу взять весь чертеж (так как класс, например, paddle или ball)не должен знать, как его раскрашивают) в дополнительный класс под названием Renderer.Но я не могу просто взять статические переменные AREA_WIDTH и AREA_HEIGHT из-за границы JFrame, это даст мне разные значения.Поэтому мне нужно написать метод, подобный
public int getFrameWidth() {
return frame.getContentPane().getWidth();
}
Но я не знаю, где и как я должен объявить этот метод.Поскольку моя переменная фрейма находится в конструкторе, я также не могу использовать этот метод в других классах, потому что он не является статическим.Но если я сделаю мой Jframe статичным, то это приведет к различным ошибкам, и я также думаю, что это не очень хороший путь к выходу.