У меня проблема с дизайном моей маленькой игры.У меня есть разные классы, и теперь я хочу получить доступ к Методу объектов из другого класса, который рисует Игру.Вот что я написал:
public class GameMain {
public GameMain() {
new GameFrame();
}
}
Класс GameFrame:
public class GameFrame extends JFrame {
public GameFrame() {
new GameLabel(this);
}
}
Класс GameLabel:
public class GameLabel extends JLabel {
private GameFrame gameFrame;
public GameLabel(GameFrame gameFrame) {
}
@Override
public void paintComponent(Graphics g) {
}
}
Теперь у меня есть класс, который называется Player.Этот класс Player имеет метод, который называется paintPlayer ().Этот метод использует график в качестве параметра для рисования на нем.Поэтому я хочу вызвать метод объекта paintPlayer () из моего метода paintComponent () в моем классе GameLabel.Поэтому мне нужен текущий объект Player, так что я сделал: (Старая версия моего класса GameMain)
public class GameMain {
private GameFrame frame;
private GameLabel label;
private Player player;
public GameMain() {
frame = new GameFrame(this);
label = new GameLabel(this, frame);
player = new Player(this);
}
public GameFrame getFrame() {
return frame;
}
public GameLabel getLabel() {
return label;
}
public Player getPlayer() {
return player;
}
}
Я только что создал все игровые объекты в своем классе GameMain и сгенерировал геттеры для объекта.Затем я просто дал всем конструкторам объектов экземпляр GameMain, чтобы я мог получить все необходимые мне объекты от моих получателей в классе GameMain.Вот что я сделал в своем классе GameLabel:
public class GameLabel extends JLabel {
private GameMain main;
public GameLabel(GameMain main) {
this.main = main;
}
@Override
public void paintComponent(Graphics g) {
main.getPlayer().paintPlayer(g);
}
}
Все работало, но мне сказали, что это действительно плохой способ получить доступ к методу paintPlayer ().Мне сказали, что я даю много видимости каждому классу в моем шаблоне, потому что я могу получить доступ к каждому объекту из каждого класса, у которого есть экземпляр моего класса GameMain.Но что мне делать вместо этого?Я хочу нарисовать своего игрока. Мне нужен его экземпляр в моем классе GameLabel.