2014-10-30 3 views
0

Чтобы объяснить, я создаю простую игру на Java с помощью Swing. Размер используемого JFrame необходим во многих моих классах. Сначала я просто сделал суперкласс, чтобы содержать переменные, но я вынужден найти что-то другое, потому что Java только позволяет вам продлить один раз, и мне нужно использовать суперкласс по разным причинам. Если это имеет смысл.Каков наилучший способ хранения данных, используемых большинством классов в программе?

Я храню несколько экземпляров одной и той же информации в памяти.

переменные, такие как:

высота JFrame и ширина в пикселях и плитка

высота Карта и ширина в пикселях и плитки

«Плитка» Высота и ширина

Вот некоторый код, чтобы нарисовать картину лучше:

protected static int SCREEN_WIDTH = 928;//Pixels 
    protected static int SCREEN_HEIGHT = 672;//Pixels 
    protected static int TILE_WIDTH = 32;//Pixels 
    protected static int TILE_HEIGHT = 32;//Pixels 
    protected int MAP_WIDTH = 1280;//Pixels 
    protected int MAP_HEIGHT = 1280;//Pixels 
    protected int MAP_WIDTHtile = MAP_WIDTH/TILE_WIDTH; 
    protected int MAP_HEIGHTtile = MAP_HEIGHT/TILE_HEIGHT; 
    protected static int XTILES = SCREEN_WIDTH/TILE_WIDTH;//how many tiles can fit on display x axis; 
    protected static int YTILES = SCREEN_HEIGHT/TILE_HEIGHT;//how many tiles can fit on display y axis; 
    protected ArrayList<BufferedImage> images; 
    protected ArrayList<ArrayList<Integer>> displayArray2; 
    protected ArrayList<ArrayList<Integer>> mapGlobal2; 
    protected static int xIndex = 0; 
    protected static int yIndex = 0; 

Почти все эти переменные необходимы для нескольких классов на протяжении всей моей программы. И я объявляю это несколько раз в результате. Я не могу не думать, что я выполняю это ужасно, и должен быть лучший способ сделать это. Я также чувствую, что передаю всю эту информацию, поскольку параметры для конструкторов классов - не лучший маршрут.

+2

Посмотрите на «Свойства». Сказав это, я думаю, что это действительно плохая идея «принять» что-либо о вашей среде, а ваши другие классы должны быть предоставлены (или могут быть установлены) фактические, текущие, реальные значения , Либо путем вызова методов (например, 'getWidth' и' getHeight' для компонентов), либо путем передачи информации, необходимой им для принятия решений в качестве параметров для их методов. – MadProgrammer

+0

* «.. используя JSwing (я знаю) ..» * ..You знаете, что это называется Swing (нет J)? –

+0

@AndrewThompson ха кричит. Сегодня я видел много Js. –

ответ

1

Создайте класс только для этих переменных, создайте его один раз и передайте его вокруг своего кода.

Сделайте его статическим, если существует только один экземпляр.

Вы даже можете начать добавлять методы для того, чтобы манипулировать данными лучше .. ;-)

+0

Считаете ли вы, что использование перечисления было бы разумным? –

+0

Нет, значения не соответствуют последовательности и на самом деле не связаны. – CharlieS

+0

статический класс, вероятно, то, что вы хотите, поэтому вам даже не нужно беспокоиться о создании экземпляра. – CharlieS

0

Мы возьмем пример JFrame. Например: вам нужно установить высоту JFrame в другом классе MyClass. Вы можете передать переменную экземпляра JFrame в конструкторе класса MyClass. Это конструктор Myclass.

public MyClass(JFrame frame){ this.frame = frame;} 

когда экземпляр MyClass, вы передаете ваш кадр экземпляра MyClass my = new MyClass(frame)

Теперь у вас есть ручка кадра в вашем MyClass. Который вы можете использовать для вызова методов кадра, где-нибудь, например fame.setHeight(450);

Этот подход более логичен и объектно-ориентированный, поскольку вы вызываете методы фрейма с помощью экземпляра фрейма.

Смежные вопросы