Чрезмерное использование статики в моем проекте Java Game?
В настоящее время я занимаюсь разработкой небольшой платформы на Java и написал для нее собственный игровой движок под названиемкарликовое дерево, Сейчас я'задаю себе вопросЯ злоупотреблял статикой? "
С одной стороны этоочень удобно, так как я нев каждом классе, например на карте или игроке, должна быть ссылка на экземпляр игры. С другой стороны ... Мне уже пришлось отказаться от поддержки апплета, так как он был очень глючным из-за всех этих статических вещей.
Итак, мой вопрос: поскольку вы можете быть гораздо более опытными программистами на Java, чем я, я должен избавиться от всей статики? И если да, каков будет эффективный подход, чтобы получить что-то вроде этого:
public void draw(Graphics2D) {
if (this.game.time() > this.timer) {
this.game.image.draw(this.tiles[this.game.animation.get("tileAnim")], x, y, null)
}
}
вместо:
public void draw(Graphics2D) {
if (Game.time() > this.timer) {
Image.draw(this.tiles[Animation.get("tileAnim")], x, y, null)
}
}
или еще хуже в редакторе карт:
public void control() {
if(this.map.game.input.keyPressed(...)) {
this.map.game.sound.play(...);
}
}
РЕДАКТИРОВАТЬ
Основываясь на ответах, я решил создать класс GameObject, который предоставляет методы-оболочки для каждого компонента. Карта, игрок и т. Д., Затем подкласс от него, так что все вызовы this.game скрыты за кулисами, и на передней стороне все еще выглядит красиво:
public class GameObject {
private Game game;
public GameObject(Game g) {
game = g;
}
public Game Game() {
return game;
}
public GameAnimation Animation() {
return game.animation;
}
public GameInput Font() {
return game.input;
}
// ...
public long Time() {
return game.time();
}
}
Теперь код выглядит так:
public class Player() {
public Player(Game g, int xpos, int ypos) {
super(g);
// do other stuff
}
public void jump() {
// jump code
Sound().play("jump");
}
}
Или это еще хуже Java?
EDIT2
Хорошо яя уже столкнулся с проблемами при использовании вызовов методов, которые компилятор выдает мне ошибки, так как он может 'я не могу найти методы моей подклассовой игры в оригинальнойЯ собираюсь использовать простые поля здесь.
EDIT3
Хорошо, теперь мой класс GameObject выглядит следующим образом, все снова работает нормально, и я могу переопределить поддержку этого апплета :)
public class GameObject {
protected Game game;
protected GameAnimation animation;
protected GameFont font;
protected GameInput input;
protected GameImage image;
protected GameSound sound;
public GameObject(Game g) {
game = g;
animation = game.animation;
font = game.font;
input = game.input;
image = game.image;
sound = game.sound;
}
}