3

.tmxマップファイルを使用するiOS用のゲームを書いています。私はアプリケーション「Tiled」でマップを作成していて、iOSに到達する前のある時点で、Perlでマップを解析しています。

ファイルをストレートXMLとして保存するとき、perlがそれらを解析するのは簡単です。ただし、cocos2dは、ファイルがbase64でエンコードされていることを要求します。「Tiled」マップエディタは、このエンコーディングスキームでファイルを保存するのに問題はなく、iOSはそれらを問​​題なく読み取りますが、私のperlコードに問題があります。

何らかの理由で、perlの標準のMIME :: Base64 decode_base64()メソッドはここでマスタードをカットしていません-文字列をデコードすると、1つまたは2つのバイナリ文字が表示されます-ひし形のボックスなどに疑問符が表示されます。

また、TMXファイル形式のあいまいなドキュメントでは、base64エンコーディングの前または後に他のエンコーディングが行われていて、この問題を引き起こしている可能性があるかどうかが不明確になっています。エンコーダーのcppソースを調べたところ、Latin1への参照がたくさん見られましたが、何が起こっているのかを詳細に解読できませんでした。

MIME :: Base64を使用して独自のテストを実行し、テスト文字列をエンコードしてからデコードしようとすると、エンコードされたテキストがTMXファイルから出力されるテキストとは劇的に異なることに気付きました。たとえば、base64でエンコードされたテキストです。短い文字列のテキストは次のようになります。

aGVyZSBpcyBhIHNlbnRlbmNl

ただし、TMXファイルからのbase64でエンコードされたテキストは次のようになります。

9QAAAAABAAANAQAAGAEAAA==

そのような文字列をデコードするために他に何を試みる可能性があるかについての提案はありますか?

4

1 に答える 1

3

このページはあなたが探しているものかもしれないと思います。最初にdecode_base64を実行し、次に(compression="gzip"属性が存在する場合)gunzipを使用して解凍し、最後にを使用unpack('V*', $data)して4バイトのリトルエンディアン整数のリストを抽出することをお勧めします。

于 2011-07-10T01:18:14.330 に答える