В настоящее время я создаю искатель подземелья. Я обрабатываю все поколения подземелий, генерацию коллизионных коробок, сокровища и поколение врагов, а также создание игроков в одном классе под названием Dungeon. Каждый из объектов, созданных в классе подземелья, имеет getter.Наиболее эффективная практика доступа к объектам в других классах: Java
В основном классе я использую таймер анимации, чтобы обрабатывать все обновления от игрока, открывая сокровища и т. Д. Для этого требуется доступ ко многим объектам, созданным в классе Dungeon.
Я пытаюсь лучше понять использование и использование ссылок на объекты в Java. Мой вопрос: каков более эффективный метод доступа к переменным класса Dungeon (или любого другого класса, если на то пошло), так как я обращаюсь к ним сотни или тысячи раз?
Например, все сокровища в подземелье находятся в переменной ArrayList, которая является переменной-членом класса Dungeon. Итак, я могу получить список массивов в моем основном классе следующим образом: dungeon.getTreasureList()
. Если мне нужно получить конкретный элемент в этом ArrayList, я мог бы использовать: dungeon.getTreasureList().get(i)
, где i
- это индекс объекта сокровища, который я хочу. Это нормально для коротких вызовов (организационно говоря), но это становится очень грязным с более длинными вызовами, например: dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls())
В качестве альтернативы я мог бы создать ссылку на список сокровищ в моей главной форме следующим образом: ArrayList<Treasure> treasure = dungeon.getTreasureList()
. Тогда, если мне нужен конкретный объект в ArrayList, я могу позвонить: treasure.get(i)
. Это может очистить длинный вызов выше до чего-то более подобного: player.topIntersects(collisions.getWalls());
. Это намного легче читать, и в результате я предпочитаю этот метод немного больше.
Не считая организационных преимуществ, лучше ли создавать ссылку на доступ к переменной для доступа к информации или использовать более длинную форму и геттеры (например, это dungeon.getTreasureList().get(i)
)?
Кажется, что, создав ссылку для игрока и коллизий в вызове dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls())
, я сохраняю два вызова функций с помощью player.topIntersects(collisions.getWalls());
. А именно, один вызов функции dungeon.getPlayer()
и один вызов dungeon.getCollisions()
.
Поскольку это называется тысячи раз во время игры, кажется безопасным предположить, что я экономлю много тысяч вызовов функций до dungeon.getPlayer()
и dungeon.getCollisions()
, что приводит к более эффективному коду. Правильно ли я в этом предположении?
EDIT: Попытка сделать вопрос более объективным и менее мнение, основанное и исправлениями вводящим в заблуждение фразировки
Я чувствую, что это немного запах кода; возможно, попытайтесь реорганизовать свои логические и классовые обязанности. Помните ** Принцип единой ответственности ** https://en.wikipedia.org/wiki/Single_responsibility_principle – Michael
Я должен немного разъяснить, класс Dungeon обрабатывает все вызовы другим классам поколений. Карта подземелья создается в своем классе, сокровища генерируются в их собственном классе, враги генерируются в их собственном классе и т. Д.Я реорганизовал кучу Main, чтобы убедиться, что основная ответственность несет ответственность за обновление и повторную визуализацию, когда происходят изменения в цикле обновления. – MKreegs