2015-03-05 2 views
0

В настоящее время я делаю игру, у которой есть блоки, и пользователь контролирует их. Я хочу, чтобы иметь возможность обнаруживать, когда блоки перестали двигаться, потому что они приземлились на другом блоке или попали в нижнюю часть, чтобы создать новый блок (например, как Tetris порождает новый кусок каждый раз, когда блок останавливается попадает в нижнюю часть). Как я мог получить y из этого метода, чтобы я знал, что блок остановился и не имеет скорости в направлении y?Получение значения целого из метода внутри?

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

int y = 0; 
    int ya = 0; 

    public void move() { 

     if(x + xa < game.getWidth() - WIDTH && x + xa > 0) { 
      ya = 2; 
     }if(y + ya > game.getHeight() - 50) { 
      ya = 0; 
     } 

     y = y + ya; 
     x = x + xa; 

    } 

Где-то в коде, я хотел бы быть в состоянии сделать это:

// If the block stops moving (The y value in the move method is equal to 0) 
if(y == 0) { 
    //Create new block object to drop, and allow the user to control this new block 
} 
+0

Это не имеет смысла. Вам не нужно «извлекать» переменные, так как они не являются локальными переменными (т. Е. Вы объявили их в другом месте). –

+0

@ Август, переменные все хранятся вне метода, но когда я распечатываю их значения, они никогда не меняются – AlecR

+0

Затем, пожалуйста, создайте [минимальный тестовый пример] (http://stackoverflow.com/help/mcve), который демонстрирует это , –

ответ

1

вы должны объявить переменную у из всех методов, предпочтительно после определения объявления класса (более читаемый код), а второй метод также должен быть в том же классе, если вы пытаясь получить доступ к y из другого класса, вы должны создавать объекты с первого класс. Возможно, вы пытались получить доступ к значению y перед запуском метода перемещения (есть много возможностей) Отправьте свой класс (код) здесь, тогда я могу вам помочь.

0

Как писал, кажется, вы определенно можете получить доступ к переменной у снаружи способа перемещения

int y = 0; 
    int ya = 0; 

    public void move() { 

     if(x + xa < game.getWidth() - WIDTH && x + xa > 0) { 
      ya = 2; 
     }if(y + ya > game.getHeight() - 50) { 
      ya = 0; 
     } 

     y = y + ya; 
     x = x + xa; 

    } 

    public void someOtherMethod(){ 
     //operations with y go here 
    } 

Однако, если вы хотите объявить у частных, вам нужен метод что-то вроде

public int getY() { return y; }

Если вы пытаетесь получить к нему доступ из статического метода, вам необходимо либо объявить все методы и переменные статическими (что не рекомендуется), либо вам нужно будет использовать его как экземпляр a класс:

public class MyClass{ 

    private int y; 
    public void move() { 

    if(x + xa < game.getWidth() - WIDTH && x + xa > 0) { 
     ya = 2; 
    }if(y + ya > game.getHeight() - 50) { 
     ya = 0; 
    } 

    y = y + ya; 
    x = x + xa; 

    } 

    public int getY(){ 
     return y; 
    } 

    public static void main(){ 
     MyClass someClass = new MyClass(); 
     int y = someClass.getY(); 
     // other operations 
    } 
} 

Если вы хотите получить дополнительную помощь, пожалуйста, напишите полный код!

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