2015-07-03 3 views
0

Я создал логическое имя endGame, и когда я нажимаю кнопку, он будет установлен в false, а затем в другом классе я создал объект для класса, где находится мое логическое значение. А когда что-то случится эндшпиль будет установлен true:Почему моя логическая переменная не обновляется в других классах?

if(condition==true){ //the endGame variable will be equal to true only on this class 
classObj.endGame=true; 
} 

//on the other class where the endGame is Located it is still false. 



    //button class 
public boolean endGame; 
    public void create(){ 
    endGame=false; 

    playButton.addListener(new InputListener(){ 
       @Override 
       public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
        endGame=false; 
        System.out.println(endGame); 
        return super.touchDown(event, x, y, pointer, button); 
       } 
      }); 
    } 

    //second class 
    if(sprite.getY()>=700){ 
     buttonObj.endGame=true; 
     enemyIterator.remove(); 
     enemies.remove(sprite); 
    } 
+0

Вы уверены, что это тот же экземпляр classobj? Вы уверены, что проходите через оду, которая устанавливает переменную в true? –

+0

detailate .......... – Elltz

+0

Где вы делали classObj? это глобальная переменная? Дайте нам что-то для работы здесь! –

ответ

1

, а затем на другой класс я сделал объект для класса, где мои булев является

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

Это означает, что если вы установили endGame в true в одном объекте соответствующего класса, он не обновил бы значение endGame в разных объектах этого класса.

+0

Должен ли я установить его на Static? –

+0

@StormAsdg Это сложно сказать, не зная ничего о вашем приложении. Он должен быть либо статическим, либо (если он не является статичным), все объекты, которые обращаются к этому булеву, должны получить к нему доступ, используя тот же объект соответствующего класса (таким образом, все они будут видеть одно и то же значение логического). – Eran

+0

@StormAsdg Я рекомендую вам прочитать книгу на Java. Вы действительно будете пытаться сделать игру на Java без фундаментального понимания того, какие классы. – Tenfour04

0

У вас есть несколько способов исправить это, может быть, я скажу, что это не самое лучшее, но не зная ничего из их кода. ? Потому что если классы не наследуют друг от друга, или вы можете использовать одноэлементный шаблон, я думаю, что этот пример может быть стоит для вас наблюдателя:

public class WraControlEndGame { 

    private ArrayList<EndGameOBJ> endGameOBJ = new ArrayList<EndGameOBJ>(); 

    public void addEndGameOBJ(EndGameOBJ actor){ 
     endGameOBJ.add(actor); 
    } 

    public void removeEndGameOBJ(EndGameOBJ actor){ 
     endGameOBJ.remove(actor); 
    } 

    public void endGameOBJ_ChangeValue(boolean value){ 

     for(int a = 0; a < endGameOBJ.size(); a++){ 
      endGameOBJ.get(a).setEndGame(value); 
     } 

    } 
} 

.

public interface EndGameOBJ { 
    public void setEndGame(boolean value); 
    public boolean getEndGame(); 
} 

.

public class YourClassThatNeedEndGameVariable implements EndGameOBJ{ 
..// other code 


private boolean endGame = false; 

..// other code Construct ect 

    @Override 
    public void setEndGame(boolean value) { 
     endGame = value; 
    } 

     @Override 
    public boolean getEndGame() { 
     return endGame; 
    } 

} 

.

в вашем коде, например, это псевдо-код, вы орудия EndGameOBJ в классе вам нужно, вы смотрите пример в общественного класса YourClassThatNeedEndGameVariable.

someClass buttonObj = new ....;//now this class implements EndGameOBJ 
someClass classObj = new ....;//now this class implements EndGameOBJ 

WraControlEndGame wraControlEndGame = new WraControlEndGame(); 

wraControlEndGame.addEndGameOBJ(buttonObj); 
wraControlEndGame.addEndGameOBJ(classObj); 

//bla bla bla 



if(condition){ 

    wraControlEndGame.endGameOBJ_ChangeValue(true); 
} 

Я надеюсь, что это поможет и извиниться за мой английский.

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