mieki256's diary



2015/09/05() [n年前の日記]

#1 [cg_tools][dxruby] Tiledのjsonエクスポート仕様がまた変わってた

_Tiled Map Editor というマップエディタを使って背景データ(BGデータ)を作成しているのだけど。0.13.0が公開されていたのでアップデートして作業したら、エクスポートしたjsonが、Ruby + DXRuby で処理できなくなっていて。

今まで、Tiled でエクスポートしたjsonは、レイヤーのタイルの並びがCSV形式のようになってたのだけど。
"data":[209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, (以下略

現在の Tiled は、jsonをエクスポートする際、.tmxファイルを保存する際の「タイルの出力形式」を引き継ぐ仕様になったようで。デフォルトでは「Base64 (zlib圧縮)」になってるから…。
"compression":"zlib",
"data":"eJzt2bdRA0EcRvFVCRIgfCCcsAFOCEkE8tgM0wCmAUwDmAYw7fKCi26 (以下略
"encoding":"base64",
こんな感じで、状況によっては、Base64のデコード?と、zipバイナリの展開が必要になってしまった模様。もちろん、圧縮されてる分、テキスト量はグンと少なくなるわけで、データファイルの容量削減という面ではありがたいのだけど。

一応、「タイルの出力形式」を「CSV」にしておけば、今まで通りのエクスポート結果になるようだけど。うっかり忘れそうだな…。

そういえば、いつの間にか json 中に含まれる画像ファイルのパスが、相対パスになっていたことにも気づいたり。以前は絶対パスで記述されちゃってたので、ディレクトリ部分を除外する処理を追加した記憶があるのだけど。まあ、どう考えても、絶対パスで記述するのは変だよな…。他の環境に移した時に画像ファイルが見つからなくてバグが出るし。相対パスで記述されてるほうが正解、だと思うわけで。

Ruby側での対応。 :

Base64 のデコードは、'base64' を、zlib形式バイナリの展開は 'zlib' を使う。
require 'base64'
require 'zlib'

デコードと展開をしてるところだけ抜き出してメモ。
      if layer.has_key?("encoding") and layer["encoding"] == "base64"
        # base64で記録されてたら変換
        bin_str = Base64.decode64(layer["data"])
      else
        bin_str = layer["data"]
      end

      if layer.has_key?("compression") and layer["compression"] == "zlib"
        # zlibで記録されてたら展開して、unsigned int の配列に変換
        bin_data = Zlib::Inflate.inflate(bin_str)
        lst = bin_data.unpack("I*")
      else
        # csvで記録されてる場合はそのまま
        lst = bin_str
      end
lst に一次元配列が入るので、レイヤーのタイル横個数とタイル縦個数を使って二次元配列に変換すれば、DXRuby の Window.drawTile() でタイルBGが描画できる。

Rubyのtmxライブラリ。 :

Tiled の保存形式、.tmx を直接読み込める tmxライブラリを使えば、わざわざjsonでエクスポートしなくても済むのだけど。

_tmx | RubyGems.org | your community gem host
_shawn42/tmx

tmx は Nokogiri を使ってるので、Nokogiri が Windows + Ruby 上でインストールできなくなってる時には、Nokogiri に依存してる tmx もインストールできなくて。*NIX環境ではすんなりインストールできても、Windows ではダメ、みたいな。

その点、jsonでエクスポートしてソレを使えば、Ruby に標準でついてるライブラリだけでも処理ができるから、tmx を使わなくても済むかなと思ってたけど。Tiled 側がこんな感じで、ちょこちょこ仕様を変えてくるなら、tmx を使ったほうが対応が楽かもしれないよなと…。

以上、1 日分です。

過去ログ表示

Prev - 2015/09 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project