2015-05-14 5 views
0

Мне нужно уметь видеть во всех этих классах, если переменная true.Как использовать переменную в двух классах?

public void performAction() { 
    if (door.intersects(HERO)) { 
     System.out.println("ActionPerformed!"); 
     HeroX = 0; 
     HeroY = 0; 
     inside = true; 
     } 
    } 

Это каждый раз, когда я нажимаю ПРОСТРАНСТВО и теперь я хочу обратить внутрь дома. В главном классе, где я рисую все, что я хочу сказать что-то вроде:

public void paintComponent(Graphics g) { 
    if (!inside) { 
     g.drawImage(Background, 0, 0, null); 
     achilles.Draw(g); 
    }else if (inside) { 
     g.drawImage(HouseInside, 0, 0, null); 
     } 
    } 

Я не знаю, как изменить «внутри» в классе героя и использовать его в главном классе. Я пробовал так много вещей, и я не знаю, что делать.

+0

Вы ищете общую переменную или глобальную переменную состояния? Оба могут выполнить то, что вы хотите. – Ivan

ответ

1

внутри является свойством объекта HERO, поэтому, если свойство является открытым, вы можете получить доступ к нему с heroname.inside

Если свойство является частным (что это вообще должно быть), то есть использовать функцию общего доступа внутри класса HERO, такую ​​как HERO.isInside, и установить ее с помощью функции настройки, такой как HERO.setInside и HERO.setOutside.

это часто называют «добытчиками и сеттеров»

1

То, что вы, вероятно, хотите, глобальные переменные

public class Global{ 
    public static int value; 
} 

Вы можете получить к ним доступ из любого места:

Global.value; 
0

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

public boolean isInside() { 
    return (inside); 
} 

Если есть только когда-либо один экземпляр класса Hero (маловероятно, но нормально), то один вариант, чтобы сделать внутри общественной статической переменной, например так:

public static boolean inside; 

ссылка из Main, как это :

if (! Hero.inside) { 

или сделать внутри частной статической переменной с геттер, как это:

private static boolean inside; 

public static boolean isInside() { 
    return (inside); 
} 

ссылки из Main, как это:

if (! Hero.isInside()) { 
0

Попробуйте использовать поглотитель, чтобы получить атрибут inside вне Hero, и сеттер, чтобы изменить его:

public class Hero { 
    private boolean inside; 

    ...   

    public boolean isInside() { 
     return this.inside; 
    } 

    public void setInside(boolean inside) { 
     this.inside = inside; 
    } 
} 

Я также рекомендую прочитать более около encapsulation; это даст вам лучшее представление о том, как работать с объектами в Java.

0

Вы можете моделировать его по-разному:

public class House { 

    Location currentLocation=Location.OUTSIDE; 

    Map<Location, String> layout=new HashMap<>(); 

    public House(){ 
     layout.put(Location.INSIDE,"Draw the inner parts"); 
     layout.put(Location.INSIDE,"Draw the outer parts"); 
    } 

    public void enterDoor(){ 
     currentLocation=(currentLocation==Location.OUTSIDE)?Location.INSIDE:Location.OUTSIDE; 
    } 

    public void draw(){ 

     System.out.println(layout.get(currentLocation)); 

    } 

} 

Вот enterDoor что-то, что может быть уволен событием в вашей игровой среде.Таким образом, ваш дом знает, как сделать себя в зависимости от его состояния.

Скажите ваш персонаж перемещается в некоторых координатах (х | у), где дверь, то enterDoor призывается House, который, в свою очередь, переключает раскладку.

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