我想使用json文件中的值
这是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"));
}
}
(主类)
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文件中保存特定x位置的按钮 但它什么都没给我。
我的代码有什么问题?
有什么想法吗?
答案 0 :(得分:1)
在load()结束时,您没有将结果设置为对齐。只需添加按钮=:
public void load() {
//instead of this line:
//buttons = new Array<Button>();
Json json = new Json();
json.setTypeName(null);
json.setUsePrototypes(false);
json.setIgnoreUnknownFields(true);
json.setOutputType(JsonWriter.OutputType.json);
// set buttons here:
buttons = json.fromJson(Data.class, Gdx.files.internal("buttons.json"));
}
答案 1 :(得分:1)
您的Data类加载Data类的另一个实例,但不会将其分配给任何内容。这是循环的,没有意义。 load
方法应该是静态的,返回一个Data对象(这是当前load
方法提供的最后一行),而不是尝试实例化一个空的buttons
数组未使用。
您的按钮类隐藏了超类的x
字段和setX
方法,因此无法更改绘制时使用的精灵的实际X位置。 Sprite已经有x
参数,因此您不应该添加自己的参数。如果您只是从Button类中删除这两件事,它应该可以工作。
那就是说,你不应该为每个按钮加载相同纹理的另一个副本。这是浪费内存和纹理交换。除非你非常小心处理这些精灵“拥有”的纹理,否则你也会泄漏记忆。