Subscribe:

About

domingo, 19 de maio de 2013

Relatório de atividades (12/05 a 18/05)

Houve alguns avanços bem significativos no projeto Tools, as ferramentas de implementação do jogo, embora ainda não haja uma interface gráfica. O RPG também está indo bem, mas ainda restam alguns desafios que podem tomar um tempo.

  • Gabriel: Construção das ferramentas (modelos e gerenciamento de arquivos).
  • Hugo e Leon: Implementação do RPG (interpretação/renderização do mapa e movimentação do jogador).
  • Lucas Hideki: Interface de menus.

Para fins de documentação, a seguir vou comentar brevemente sobre o problema de compatibilidade entre os arquivos e como resolvemos.


No projeto, utilizamos a biblioteca JsonBeans para a serialização e desserialização de objetos em arquivos JSON devido ao fato de ser compatível com o LibGDX. A biblioteca funciona bem quando é utilizada em um único sistema, mas encontramos uma dificuldade ao lidar com dois projetos distintos, com pacotes e classes diferentes: listas. Observe, por exemplo, a seguinte classe, com getters, setters e construtores omitidos :

public class Foo {
  private String name;
  private ArrayList<Integer> fooBars;
}

Um objeto dessa classe serializado possui a seguinte representação em JSON, por padrão:

{
"name": "Name"
"fooBars": [
  {"class": "java.util.Integer",
   "value": 2
  },
  {"class": "java.util.Integer",
   "value": 40
  }
]
}

Como listas podem armazenar objetos de quaisquer tipos, é necessário fazer referência ao nome completo da classe, incluindo pacote (no caso, java.util.Integer). Isso é um problema no nosso caso, uma vez que temos classes idênticas, mas em pacotes distintos (por exemplo: "com.example.Card" e "com.example.tools.Card"). Para contornar a situação, criamos em ambos os projetos uma classe que inicializa um objeto Json e atribui tags comuns às classes:

// Projeto 1:
Json json = new Json();
json.addClassTag("Card", com.example.Card.class);

// Projeto 2:
Json json = new Json();
json.addClassTag("Card", com.example.tools.Card.class);

Logo, cada um dos projetos lida com suas próprias classes e pacotes, mas a interação entre os sistemas não é prejudicada devido ao uso de tags compartilhadas.

0 comentários:

Postar um comentário