2016-01-31 1 views
1

Я хочу использовать значение из JSon файлаИспользуя значение из JSon файла в Libgdx

Вот файл Json

{ 
    "button" : [ 
    { 
     "x" : 50.0 
    }, 
    { 
     "x" : 150.0 
    } 
] 
} 

У меня есть следующие классы

(кнопка класса)

public class Button extends Sprite{ 

    float x; 

    public Button() { 
     super(new Texture("button.png")); 
    } 

    @Override 
    public void setX(float x) { 
     this.x = x; 
    } 

} 

(класс данных)

public class Data { 

    public Array<Button> buttons; 

    public void load() { 
     buttons = new Array<Button>(); 

     Json json = new Json(); 
     json.setTypeName(null); 
     json.setUsePrototypes(false); 
     json.setIgnoreUnknownFields(true); 
     json.setOutputType(JsonWriter.OutputType.json); 
     json.fromJson(Data.class, Gdx.files.internal("buttons.json")); 

    } 
} 

(Main Class)

public class GameMain extends ApplicationAdapter { 

    SpriteBatch batch; 
    Data data; 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 

     data = new Data(); 
     data.load(); 

     for(Button b : data.buttons) { 
      b.setX(b.x); 
     } 

    } 

    @Override 
    public void render() { 
     Gdx.gl.glClearColor(0, 0, 0, 1f); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     batch.begin(); 
     for(Button b : data.buttons) { 
      b.draw(batch); 
     } 
     batch.end(); 
    } 
} 

Я хочу рисовать кнопки в определенных положениях х, которые проводятся в JSon файле но это не дает мне ничего.

Что не так в моем коде?

Любые идеи?

+0

Вы должны вернуться и принять хорошие ответы по старым вопросам. Вы получите репутацию, и люди будут готовы помочь вам. – Tenfour04

ответ

1

в конце нагрузки() вы не оценили результаты. Просто добавьте кнопки =:

+0

Вы имеете в виду это кнопки = json.fromJson (Array.class, Gdx.files.internal ("buttons.json")); – MAGS94

+0

см. Мое редактирование. Нет необходимости в местных кнопках, поэтому кнопки в любом случае являются кнопками. – Gavriel

1

Класс Data загружает другой экземпляр класса Data и не присваивает ему ничего. Это круговой и не имеет смысла. Метод load должен быть статическим, вернуть объект Data (это то, что предоставляет последняя строка вашего текущего метода load), и не пытаться создать экземпляр пустого массива buttons, который не используется.

Класс вашей кнопки скрывает поле x и метод суперкласса setX, что делает невозможным изменение фактической позиции X спрайта, который используется при рисовании. Sprite уже имеет параметр x, поэтому вы не должны добавлять свои собственные. Если вы просто удалите эти две вещи из своего класса Button, это должно сработать.

Таким образом, вы не должны загружать другую копию одной и той же текстуры для каждой кнопки. Это пустая трата памяти и обмен текстур. И если вы не очень осторожны в том, чтобы избавляться от текстур, «принадлежащих» этими спрайтами, вы также теряете память.

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