2014-05-10 4 views
3

libgdx에서 JSON을 사용하는 방법, 특히 객체를로드하고 저장하는 방법에 대해 인터넷에서 수색을 해왔지만, 제가 발견 한 것은 모두 하나의 객체만을 다루는 자습서입니다. 필자의 경우에는 다른 많은 객체 내부에서 많은 객체를 다루게 될 것입니다.LibGDX JSON 객체 저장/직렬화

이것을 원근감있게 표현하려면 World 클래스가 있다고합시다.

World 클래스에는 Level 클래스 목록이 있습니다.

각 클래스 내에는 Tile 클래스의 배열이 있습니다.

Tile 클래스 내에는 TopTile 클래스와 BotTile 클래스가 있습니다.

BotTileTopTile 클래스에는 정수와 문자열 및 사물이 포함되어 있습니다. 또한 Entity 목록

Entity가 각 Level 클래스 내

는 당신이 볼 수 있듯이, 많은 클래스가 있으며, 이러한 클래스 내에서 더 클래스가 Items

이있는 Inventory 있습니다. 모든 단일 클래스에 대한 저장 랩퍼를 작성해야합니까? 나는 단지 전체 World 클래스를 저장할 수 있다는 것을 이해하고 이것이 내 생각에 이것은 모든 파일을 하나의 파일로 쌓아 올리 겠지만 다른 모든 클래스에는 저장할 필요가없는 가비지가 많이있다. World 클래스를 저장하려면 어떻게해야합니까?

절약 래퍼를 언급했을 때, 객체 X에있는 일련의 메소드를 의미합니다. 즉, 필요한 매개 변수 만 사용하여 X을로드하고로드하여 모든 가비지를 제거합니다. 그러나 나는 많은 것들이있어 구원을받을 수있다.

은 또 다른 한가지는, Items을 포함하는 Inventory 클래스의 경우는 아무것도 각 Item에 대해 변경되지 않기 때문에 재고가 아닌 실제 Item 클래스의 내용을 저장하려는 경우에만 것입니다. Inventory에 포함 된 모든 항목을 저장하지 않아도됩니까? 나는이 모든 것이 약간 혼란 스럽다는 것을 안다. 무엇이 구원 받는가? 무엇이 구원받지 못합니까? 이것은 내가 가정하고있는 객체의 libGDX JSON 파서를 사용하고 있습니다.

의견을 보내 주시면 대단히 감사하겠습니다.

답변

0

제 libGDX 게임에서 정확히 이것을하고 있습니다. 당신은 이렇게 :

{ 
    "object_name": "basic_left_gun", 
    "object_type" : "player_ship_component", 
    "object_subtype" : "player_ship_left_weapon", 
    "subtype_properties" : 
     { 
      "shot_name" : "basic_shot" 
     }, 
    "is_animated": false, 
    "is_dual_state": false, 
    "is_destructible": true, 
    "hitpoints": 16, 
    "second_state_name": "", 
} 

그래서 "subtype_properties"필드를보십시오. 안에 다른 JSON 객체 이 있습니다. 그래서 직렬화하고 json.get ("subtype_properties") 할 때 Java JSON 개체를 쿼리 할 때 실제로 다른 JSON 개체를 가져옵니다. 거기서 나는 질의를하고 속성을 얻을 수있다.

이론적으로, 당신은 영원히 이것을 할 수 있습니다. 제 접근 방식은 각 객체에 대한 JSON에 기본 정의 저장소를 저장 한 다음 위와 같이 중첩 된 JSON 객체를 사용하여 해당 속성을 서로 연결하거나 동일한 접근 방식을 사용하여 고유 속성을 정의하는 것이 었습니다.

+0

더 많은 설명이 필요하면 알려주세요. 내 JSON을 읽는 데 사용하는 코드를 게시합니다. –