Cansado de utilizar diversas soluções que só me deram dor de cabeça, resolvi escrever um parser de .tmx
que funciona da maneira mais simples possível.
Trata-se de somente uma classe que possui uma função-membro estática(para não precisa instanciar) e ele retorna um vector<vector<int>>
para implementar rapidamente.
A única dependência é o TinyXML2 que detalharemos mais à frente.
Para mais informações sobre o TinyXML2, veja essa publicação:
Para utilizá-lo, você precisa ou instalar o TinyXML2 ou usá-lo sem instalar nesse repositório resumido que eu fiz um fork.
Só que o mais indicado mesmo é você instalá-lo no seu sistema. Abaixo exemplo de instalação no Ubuntu e derivados:
Agora basta clonar com seu controle de versão preferido, exemplo com Git
E copiar o arquivo
loadtmx.hpp
para seu projeto.
Para implementar basta criar um arquivo qualquer, incluir o loadtmx.hpp
e utilizar ou o std::vector<std::vector<int>>
ou o auto
, exemplo:
vim main.cpp
Suponhamos que você possua esse .tmx
e deseje fazer o parser de cada número dele:
Para fazer o download desse exemplo use o raw do Gist ou rodar o comando abaixo:
Agora adicione ele ao seu código e imprima cada posição com um loop for
:
Para compilar rode:
A possível saída será justamente os números das posições que foram armazenados em
line
ecol
Se quiser usar um loop clássico, seria:
Se estiver usando o TinyXML2 local em vez de instalado no seu sistema, compile junto com o arquivo .cpp
do TinyXML2, exemplo: g++ main.cpp tinyxml2/tinyxml2.cpp
.
Observação: Ele já inclui o
<iostream>
e<vector>
por padrão, então incluindo ele você já pode remover qualquer outra utilização dessas bibliotecas no seu código para evitar sobrecarga.