2014-07-15 6 views
-1

Я пытаюсь вызвать переменную из частного метода в другой метод в том же классе, но на chicken.x я получаю сообщение об ошибке:Вызов переменных в частном методе Java Libgdx

chicken cannot be resolved to a variable 

Как я могу назвать спрайт прямоугольник из частного метода?

Код:

public class OptionScreen implements Screen{ 
    ... 
    Array<Rectangle> chickens; 
    ... 

    public OptionsScreen(){ 
     ... 
     chickens = new Array<Rectangle>(); 
     ... 
    } 

    private void spawnChicken(){ 
     Rectangle chicken = new Rectangle(); 
     ... 
     chickens.add(chicken); 
     ... 
    } 

    public void render(float delta){ 
     ... 
     diffYchick = (float) (farmerY - chicken.y); // Error here 
     ... 
    } 
} 
+0

В каком классе 'метод' и в каком классе находится' render'? –

+0

@Andrew_CS оба в том же классе OptionScreen, цыпленок - настоящее имя для спрайта – user3165683

+0

Все еще не уверен, что вы имеете в виду с 'chicken'. Я обновил свой ответ. Вы пытаетесь вызвать 'render' в методе' main' класса 'OptionScreen'? –

ответ

1

После чата Чтобы ответить на основную проблему, которая обсуждалась в чате:

Был ArrayList<Rectangle> chickens как переменный экземпляр для OptionsScreen класса. ОП не получал Rectangle из ArrayList в методе render. ОП использовал имя переменной chicken по другому методу, spawnChicken, который имел только метод scope. Я показал OP, как выполнить цикл по ArrayList по методу render, получить доступ к Rectangle s по одному, а затем выполнить необходимые операции.


От До чата и редактируются Вопрос Объем sprite только в методе method. Это означает, что вы можете использовать переменную sprite, находясь внутри method. Вы можете сделать переменную экземпляра sprite, тогда вы можете получить к ней доступ в другом методе того же класса.

public class OptionScreen{ 
    private Rectangle sprite; // Make instance variable 

    public OptionScreen(){ // Constructor - called when initializing 
     sprite = new Rectangle(); // Initialize (so it's not null) 
     ... // Set other info on sprite, such as x 
    } 

    public void render(float delta){ 
     ... 
     sprite.x; 
     ... 
    } 

    public static void main(String[] args){ // Example of useage 
     OptionScreen optionScreen = new OptionScreen(); // Constructor called 
     optionScreen.render(1.1); 
    } 
} 

Инициализация sprite в конструкторе гарантирует, что он не будет null при попытке использовать render. (Если вы не зададите null)


Примечание: Это, вероятно, хорошая идея, чтобы не назвать Методы method, так как он получает в заблуждение.

0

Если определить sprite локально в одном методе, вы не можете получить доступ к нему в другом методе.

Не уверенно о chicken, хотя (в коде вы не указали).

Если sprite должен быть доступен другим методом, сделайте его переменной экземпляра.

public class ClassName 
{ 
    private Rectangle _sprite = null; 

    ... 

    private void method(){ 
    _sprite = new Rectangle(); 
    } 

    ... 

    public void render(float delta) { 
    if (_sprite != null) { 
     _sprite.x ... 
    } 
    } 

} 
+0

ЭТО НЕТ ПУТЬ? ЧТО БЫЛО РЕКОМЕНДУЕТ Я ВМЕСТО? – user3165683

+0

@ user3165683 Если вам нужно, чтобы этот экземпляр выходил за пределы метода, в котором вы его определяете, сделайте его переменной экземпляра. – Eran

+0

i затем получить ошибку Исключение в потоке «Приложение LWJGL» java.lang.NullPointerException на sprite.x и т. Д. ??? – user3165683

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