Чрезмерное использование статики в моем проекте 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;
    }
    }

Ответы на вопрос(5)

Ваш ответ на вопрос