2015-11-22 2 views
0

Я создаю игру, которая включает в себя перемещение между мирами. Основной класс программы предполагает начать с представления первого мира (world1, который является экземпляром firstWorldClass). Он должен оставаться в этом мире до тех пор, пока переменная в классе world1 не изменится (проверяется world1.getMoveWorldIndicator()). Затем он должен перейти к следующему миру: удалить world1, построить world2 и добавить его в графическое представление. То же самое от мира 2 до 3. Он отлично работает, когда я делаю это между 2 мирами (удалите весь код после добавления (world2)), или если я оставлю только переход между вторым и третьим мирами. Когда я помещаю обе строки, она перестает работать (при добавлении второго цикла while). Мой код:Столкновение циклов while в строке (Java)

public class GameManager extends Program implements GameContstants{ 

public void init() { 
    world1=new firstWorldClass(); 
    add(world1); 
    while(!world1.getMoveWorldIndicator()){ 
     pause(200); 
     if(world1.getMoveWorldIndicator())break; 
    } 
    remove(world1); 
    world1=null; 
    world2=new secondWorldClass(); 
    add(world2); 
    pause(200); 
    while(! world2.getMoveWorldIndicator()){ 
     pause(200); 
     if(world2.getMoveWorldIndicator()) break; 
    } 
    remove(world2); 
    world2=null; 
    world3=new thirdWorldClass(); 
    add(world3); 
} 

private firstWorldClass world1; 
private secondWorldClass world2; 
private thirdWorldClass world3; 

}

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

Спасибо!

+0

Я думаю, вам нужно предоставить больше кода, и что такое ошибка? Также второй цикл говорит, что 'ovalWorld' вместо' world2', это намеренный? – vlatkozelka

ответ

0

Я думаю, что есть много факторов, вступающих в игру здесь:

  • очистить код. Сохранение некоторых правил кодирования важно для исправления ошибок!
  • Не используйте повторяющийся код снова и снова. Экстракт к методу или классу
  • Условные обозначения именования => Вершина верблюда для классов
  • Не устанавливайте переменные в нуль. Обычно компиляторы будут делать это для вас при оптимизации. Если вы все еще чувствуете, что вручную освобождаете пространство или имена переменных, вместо этого вы должны использовать скобки области {} вокруг кода!
  • Ломая код, мы видим много сокращений, как «getMoveWorldIndicator()» сдержки дважды в циклю, без какого-либо другого эффекта от его использования только один раз

Я представил уборщик - но разные - версию здесь, чтобы показать вам.

Но для того, чтобы действительно помочь вам с кодом, мы действительно НЕОБХОДИМСЯ с вашим кодом, чтобы получить некоторое представление о проблеме.

public class GameManager /* extends ... */{ 

    static class WorldBase { 
     public boolean getMoveWorldIndicator() { 
      return false; 
     } 
    } 
    static class FirstWorld extends WorldBase {} 
    static class SecondWorld extends WorldBase {} 
    static class ThirdWorld extends WorldBase {} 

    public void init() { 
     playWorld(new FirstWorld()); 
     playWorld(new SecondWorld()); 
     playWorld(new ThirdWorld()); 
    } 

    private void playWorld(final WorldBase pWorld) { 
     add(pWorld); 
     while (!pWorld.getMoveWorldIndicator()) { 
      pause(200); 
     } 
     remove(pWorld); 
    } 

    private void remove(final WorldBase pWorld1) {} 
    private void pause(final int pI) {} 
    private void add(final WorldBase pWorld1) {} 

} 

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

  • Нет связанных вопросов^_^