Переменная не будет обновляться (внутри оператора If) - PullRequest
0 голосов
/ 19 сентября 2019

Работа над школьным проектом, в котором мы должны изменить игру, чтобы она стала образовательной.Я хочу перебрать цифры 0, 1 и 2 через переменную moduleThree.Но переменная не будет обновляться, когда я установлю ее равной чему-то другому, чем то, что я изначально определил, и это невероятно расстраивает.

Я попытался поместить цепочку if / else в другой метод с возвращением, но этоне работалЯ попытался поместить его в несколько точек.

public class Alien extends Actor
{
    int SPEED = -7; // Speed of 10 in left direction "-"
    int tempType = (int)(Math.random() * ((2-0) + 1));
    int controlType = 0;
    int moduleThree = 0;

    public Alien() {

    }

    public void act() {
       move (SPEED);
       int timer = 10;
       if (timer>0){
           timer--;
           if(timer == 0) {
               timer = 10;
               controlType++;
               moduleThree = controlType % 3;
               if(moduleThree == 0){
                  ((SpaceLand)(getWorld())).pos.swap("bee");
               }
               else if(moduleThree  == 1){
                  ((SpaceLand)(getWorld())).pos.swap("alien");
               }
               else if(moduleThree  == 2){
                  ((SpaceLand)(getWorld())).pos.swap("soldier");
               }
           }
       }

moduleThree должен циклически проходить через 0, 1 и 2, так как он вычисляет controlType% 3, но обновление не происходит.Даже когда я вручную установил что-то вроде 4, ничего не происходит.Чрезвычайно раздражает.

1 Ответ

1 голос
/ 19 сентября 2019

Строка int timer = 10; объявляет локальную переменную, поэтому в начале каждого вызова act() таймер всегда устанавливается на 10, а переменная забывается после каждого вызова.Похоже, вы намеревались объявить timer как поле класса, чтобы сохранить его значение между вызовами действия.Если вы перенесете определение ниже того места, где объявлено moduleThree, я думаю, оно сделает то, что вы хотели.

...