2015-07-20 34 views
1

在反序列化过程中,我的对象构造函数player未被调用?有没有办法使用这种方法调用构造函数?使用libgdx反序列化json时调用对象构造函数

加载到JSON使用com.badlogic.gdx.utils.Json java对象..

LevelModel ld = new Json(). 
    fromJson(LevelModel.class, Gdx.files.internal("levels/level1.json")); 
setLevel(new Level(ld)); 

我的继承人JSON ..

{ 
    "gravity": { 
     "x": 0.0, 
     "y": 0.0 
    }, 

    "sounds": [ 
     BGMUSIC 
    ], 

    "player": { 
     "maxSpeed": 10.0 
    } 
} 

LevelModel.java看起来是这样的..

public class LevelModel { 

    private Vector2 gravity; 
    private Vector<AudioCollection> sounds = new Vector<AudioCollection>(); 
    private Character player; 

    // with getters/setters for each .. 
} 

Character实现..

public class Character { 

    private float maxSpeed; 

    public Character(){ 
     System.out.println("empty - charercter constr"); 
    } 

    /** 
    * @param speed 
    */ 
    public Character(float maxSpeed) { 

     System.out.println("charercter constr"); 
     setMaxSpeed(maxSpeed); 
    } 

    // with getters/setters for each .. 
} 

回答

1

默认情况下,libgdx json使用反射来生成反序列化的实例。所以它会创建一个空对象,然后将字段值添加到它。您的构造函数设置播放器的maxSpeed不会被调用。

如果您需要在这里执行一些花哨的逻辑,您可以使用Json.Serializable编写自己的反序列化逻辑,如Customizing Serialization中所述。

相关问题