2012-05-03 2 views
1

Я делаю небольшую игру, в которой класс Main хранит все объекты и переменные и вызывает методы внутри самих классов, которые выполняют большую часть работы. Довольно стандартный. К сожалению, это означает, что многие из переменных, которые мне нужны, находятся в главном классе, где я не могу получить к ним доступ.Переменные основного класса Java Access

Например, в качестве теста я хотел, чтобы мяч отскочил вокруг экрана, достаточно простой, но мне нужны размеры экрана, которые я могу легко получить с помощью метода getSize() в основном классе. Но когда я создаю класс Ball, который будет отскакивать, я не могу получить доступ к методу getSize(), потому что он находится в классе Main. Есть ли вообще позвонить?

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

Main.class

public void Main extends JApplet { 
    public int width = getSize().width; 
    public int height = getSize().height; 

    public void init(){ 
     Ball ball = new Ball(); 
    } 
} 

Ball.class

public void Ball { 
    int screenWidth; 
    int screenHeight; 

    public Ball(){ 
     //Something to get variables from main class 
    } 
} 

ответ

1

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

Пример Дано:

Константы класса

public class Constants { 
    private static Constants instance; 

    private int width; 
    private int height; 

    private Constants() { 
     //initialize data,set some parameters... 
    } 

    public static Constants getInstance() { 
     if (instance == null) { 
      instance = new Constants(); 
     } 
     return instance; 
    } 

    //getters and setters for widht and height... 
} 

Основной класс

public class Main extends JApplet { 
    public int width = getSize().width; 
    public int height = getSize().height; 

    public void init(){ 
     Constants.getInstance().setWidth(width); 
     Constants.getInstance().setHeight(height); 
     Ball ball = new Ball(); 
    } 
} 

Бал класс

public class Ball { 
    int screenWidth; 
    int screenHeight; 

    public Ball(){ 
     this.screenWidth = Constants.getInstance().getWidth(); 
     this.screenHeight= Constants.getInstance().getHeight(); 
    } 
} 

Другой способ может быть, чтобы запустить экземпляр объекта с Парам которые вам нужны. Пример Дано:

Основной класс

public class Main extends JApplet { 
    public int width = getSize().width; 
    public int height = getSize().height; 

    public void init(){ 
     Ball ball = new Ball(width, height); 
    } 
} 

класс Бал

public class Ball { 
    int screenWidth; 
    int screenHeight; 

    public Ball(int width, int height){ 
     this.screenWidth = width; 
     this.screenHeight= height; 
    } 
} 

Есть несколько способов добиться этого, просто высматривать себя и выбрать тот, который вы думаете, что было бы лучше для вашего проекта ,

+0

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

1

вы можете получить к ним доступ, используя только два конструктора arg.

public void init(){ 
     Ball ball = new Ball(width,height); 
    } 

public Ball(width,height){ 
     //access variables here from main class 
    } 
0

почему не так:

public void Main extends JApplet { 
public int width = getSize().width; 
public int height = getSize().height; 

public void init(){ 
    Ball ball = new Ball(width, height); 
} 


public void Ball { 

public Ball(int screenWidth, int screenHeight){ 
    //use the variables 
} 
Смежные вопросы