- 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 :
Um objeto dessa classe serializado possui a seguinte representação em JSON, por padrão:
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.
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