反転フラップ式案内表示機データフォーマット

Last-modified: 2015-03-02 (月) 03:10:23

〔重要〕ファイルの作成、編集にwindows付属のメモ帳を使わないでください
BOMの取り扱いに対応してないためです。そのうち直します。

 

作成したデータはぜひデータ共有の部屋でシェアをお願いします。

概要

反転フラップ式案内表示機(以下、パタパタ表示機)では、各回転部ごとに完全に独立した制御を行います。
各時間ごとにそれぞれの回転部に表示して欲しい番号を伝えるという形式です。

「回転機」(回転部)という概念について

反転フラップ式案内表示機では、「回転機」(または回転部)という概念を使ってデータを構築しています。
回転機概念説明.png
この画像の丸で囲った部分が、各「回転機」です。行き先、停車駅を表示する板はもちろん、時刻も全て独立しています。原則として「13時05分」と入力したからと言って自動的に連動するわけではありません。

子設定ファイルは、この回転機1つ1つについて設定していきます。1つの子設定ファイルは1つの回転機を担当することになるので、このサンプルでは18個の子設定ファイルが存在することになります。

 

α3版以降では・・・
新たに「Light属性の回転機」というものが導入されました。
ただ、回転機とは名ばかりで、実態はEventごとに表示する画像をorder定義で変えられるパーツです。
たとえばアナログな停車駅案内を再現するときなどに使えると思います(種別ごとに停車駅を示す画像を作り、それをeventごとにorderで呼び出す)。
Light属性の回転機はEventごとに表示画像を変えるパーツなので画像が回転するわけではありませんが、子設定ファイルで同じように定義をし、親設定ファイルでも通常の回転機と同じように扱うことができるので、「回転機」と呼ぶことにします。

 

ちなみに「通常の回転機」とは、板がパタパタまわる従来の回転機のことです。

 

注意:Light属性の回転機を含んだデータはα3版以降でのみ読み込みができます。

ファイル構造

パタパタ表示機で表示するデータは以下の3要素から成り立っています。

  • 親設定ファイル
  • 子設定ファイル
  • 表示する画像

重要なことは、これら3つが全て1つの同じフォルダの中に入っている必要があるということです。
また、データが入っているフォルダが階層的になってはいけません。つまり3つ全てが同じディレクトリに存在する必要があります。
どうしてこのような仕様になっているかは、後ほど説明することとします。

 

画像ファイルのフォーマットはとりあえずpngのみ動作確認を行っています。
親設定ファイル、子設定ファイルは両方とも拡張子.propertiesのテキストファイルです。(つまりお好きなテキストエディタで編集できます)
なお、テキストエディタで編集する際、必ず文字コードはUTF-8に指定してください。SHIFT-JISとかだとバグります、多分。

 

propertiesファイルでは、

WindowName = PatapataTest (この場合は、「WindowNameはPatapataTest」という意味)

というように、

キー = 値

という形で一対一対応で記述していきます。
なお、原則として大文字と小文字を識別します。大文字小文字を間違うとエラーになるので気をつけてください。


※以下、特に注釈が無い限り、パラメーターはすべて記述が必須です。

親設定ファイル

概要

このファイルでは、全体のフレームサイズ、ウィンドウの名前、背景の画像、回転機の個数などを定義し、さらにEventを定義して各回転機を統括的に制御します。文字コードはUTF-8、改行コードは任意です。

全体の設定にかかわるパラメーター

type = superFile
→このファイルが親設定ファイルであることを示すパラメーターです。プログラムはこのキーで読み込まれたファイルが親設定ファイルかどうかを判別します。
WindowName = (文字列)
→ウィンドウの名前をここで定義します。但し、現在ウィンドウにバーを表示しない仕様にしているので現在のバージョンではこのパラメーターに意味はありません。但し必須パラメーターなので何か書いておいてください。(記述が無いとエラーが出ます)
BackGroundImage = (ファイル名.拡張子)
→背景の画像を定義します。冒頭で述べたとおり画像ファイル及び設定ファイルは全て同一のディレクトリに存在する必要があるので「image\bg.png」といったような指定はできません。
FrameSize.width = (半角数字)
→画面の横幅を定義します。
FrameSize.height = (半角数字)
→画面の縦幅を定義します。
NumberOfPatapata = (半角数字)
→回転機の個数を定義します。
SubConfigPathX = (子設定ファイルの名前.properties)
→X番機の子設定ファイルの名前を定義します。

※Xについて
プログラム上では、回転部が0番機からNumberOfPatapataで定義した数 -1番機まで作成されます。具体的には

NumberOfPatapata = 6

のときに、

SubConfigPath0 = subconf1.properties
SubConfigPath1 = subconf2.properties
SubConfigPath2 = subconf3.properties
SubConfigPath3 = subconf4.properties
SubConfigPath4 = subconf5.properties
SubConfigPath5 = subconf6.properties

と、このように0番機から5番機を必ず定義する必要があります。定義漏れがあるとエラーになります。
なお、ココで各回転部に付番された番号は、後のEvent設定で使うことになるので注意してください。


※ここから先は、先に子設定ファイルの説明を読んだほうが理解しやすいです

Eventの設定にかかわるパラメーター

GroupX = (回転機の番号を半角数字カンマ区切り)
→Groupを定義します。XにはGroup番号が入り、1つのGroupには1つ以上の回転機の番号を登録できます。Xは1からの連番です。Group0は定義できません。

たとえばGroup3に3号機、4号機、5号機を登録する場合は

Group3 = 3,4,5

となります。回転機1つしか登録されていないGroupが存在しても問題ありませんが、回転機が登録されていないGroupは作ることができません。

Eventnum = (半角数字)
→Eventの個数を定義します。
EventX.Time = (6ケタの半角数字で表現された時刻)
EventX.GroupOrder = (Group番号をカンマ区切り)
EventX.MachineY.order = (半角数字)
X:Event番号、Y:回転機の番号
→この3つは各Eventについて定義します。各Eventはかならずこの3つの要素が定義に必要になります。
なお、Xは0からの連番です。Eventは0番から(Eventnumで定義した数字)-1番まで必ず定義しなければなりません

例えば例として、

Event5.Time = 093000
Event5.GroupOrder = 1,2
Event5.Machine0.order = 1
Event5.Machine1.order = 4
Event5.Machine2.order = 3
Event5.Machine3.order = 5

と記述したとしましょう。
この場合、Event5について

Event5を実行する時間:093000(9時30分00秒)←もちろん24時間表記(000000~235959)です。
実行するグループの順番:Group1→Group2
Event5実行時に0番機ではorder = 1を表示する
Event5実行時に1番機ではorder = 4を表示する
Event5実行時に2番機ではorder = 3を表示する
Event5実行時に3番機ではorder = 5を表示する

といった意味になります。

「実行するグループの順番」について

たとえば先ほど冒頭あたりで出したサンプルを使うと
回転機概念説明.png
実際のパタパタ案内表示機において、表示を変えるときに全ての回転機が同時に回りだすということはなく、まず緑で囲った回転機が一斉にまわり、それが終わったら青でかこった回転機が一斉にまわり、最後にオレンジでかこった回転機が一斉にまわる・・・というふうに通常は動作します。
このソフトウェアでもそれを再現するために、実行するグループの順番を定義できるようにしています。
たとえば、Group1にこの図の緑でかこった回転機たちを登録、Group2にこの図の青でかこった回転機たちを登録、Group3にこの図のオレンジでかこった回転機たちを登録したとしましょう。
このとき、

EventX.GroupOrder = 1,2,3

と記述すると、X番のEventにおいて、
緑でかこった回転機→青でかこった回転機→オレンジでかこった回転機
の順に回転してくれます。

 

なお、全ての回転機を一斉に回したい場合は、あるGroupにすべての回転機を登録して、GroupOrderにそのGroupだけを登録すればOKです。1つの回転機は複数のGroupに所属することができます。

子設定ファイル

概要

このファイルでは、各回転部について、表示する画像、大きさ、パターンの数などを定義します。
1つの回転部に1つのファイルが対応するので、通常子設定ファイルは複数存在することになります。
回転機には板を回転させる通常の回転機と、eventごとに表示する画像を切り替えるだけのLight属性回転機があります。

通常の回転機のパラメーター

type = subFile
→ファイル識別子です。このパラメーターでファイルが子設定ファイルであることを識別します。
MachineSize.width = (半角数字)
→回転部の幅です(単位pixel)
MachineSize.height = (半角数字)
→回転部の高さです(単位pixel) 画像をタテに2枚並べた状態での値です。
Location.X = (半角数字)
→回転部の左下のX座標です。
Location.Y = (半角数字)
→回転部の左下のY座標です。
子設定ファイル説明1.png
 
NumberOfPlate = (半角数字)
→表示できる状態の数です。親設定ファイルのEventで指定するorderは1以上この値以下になります。
PlateImageX = (画像ファイル名.拡張子)
→所定の位置に画像をセットします。

Xは0から連番の半角数字ですが、このXは親設定ファイルのEventで使うorderと深いつながりをもっています。
例えば、order = 1のときに、回転機の下半分にはPlateImage1で指定した画像が、回転機の上半分にはPlateImage2で指定した画像が入ります。
order = 2ならば回転機の下半分にはPlateImage3で指定した画像が、回転機の上半分にはPlateImage4で指定した画像が入ります。
order = Kのとき、回転機の下半分にはPlateImage2K-1、回転機の上半分にはPlateImage2Kで指定した画像が入ります。
但しここで注意点があります。今、NumberOfPlateで設定した値をNとすると、
order = Nのとき、回転機の下半分にはPlateImage2N-1、回転機の上半分にはPlateImage0で指定した画像が入ります。(したがってPlateImage2Nは存在しません。)

 

もうお分かりだとは思いますが、PlateImageにはそれぞれ上半分、下半分のみの画像が入ります。
PlateImage0は例外(order = Nの下半分の画像になる)ということをお忘れなく。

Light属性回転機のパラメーター

type = subFile
→ファイル識別子です。このパラメーターでファイルが子設定ファイルであることを識別します。
MachineType = Light
→この子設定ファイルがLight属性回転機を示すことを識別します。この記述がない場合は通常の回転機として識別されます。
MachineSize.width = (半角数字)
→回転機の幅、というより表示する画像の幅です(単位pixel)
MachineSize.height = (半角数字)
→回転機の高さ、というより表示する画像の高さです(単位pixel)
Location.X = (半角数字)
→回転機、というより表示する画像の左下のX座標です。
Location.Y = (半角数字)
→回転機、というより表示する画像の左下のY座標です。
Imagenum = (半角数字)
→表示する画像の種類の数を定義します。
ImageX = (画像ファイル名.拡張子)
→表示する画像を定義します。Xは半角数字で0≦X≦Imagenumで定義した数-1 です。
Light属性回転機の場合、order番号はこのImage番号と同一になります。

表示する画像

画像と設定ファイルは全て同一の1つのディレクトリに入れてください。
たとえば
フォルダ
|--設定ファイル
|--Imageフォルダ
    |--画像たち

と配置して設定ファイルで
BackGroundImage = ImageYen.pngBackground.png
とすることは避けてください。

 

たしかに子設定ファイルの数は非常に多くなる場合もありますし、画像ファイルの数も非常に多くなるのですっきりさせるために内部にフォルダを作りたいというのはわかります。
しかし、このソフトウェアはJavaで記述しており、あらゆるプラットフォーム(OS)に対応しているというのも重要な特徴です。
階層の表現方法はOSによってまちまちで、Windowsでは「Yen.png」を使いますが、Macでは「/」を階層の区切り文字として使っています。
設定ファイルは全て親設定ファイルの存在するディレクトリを基準とした相対パスで記述することになっていますが、ここで階層の区切り記号を含めてしまうと、OSごとに挙動が異なってしまいます。
このような事態を避けるため、画像および設定ファイルは全て同一のディレクトリに置いてください。

ちなみにWiki上でもWindowsで「Yen.png」と表示されるものがMac上だと「BackSlash.png」と表示されてしまうようなので記号を画像にさせていただきました。

背景画像

背景画像はpngフォーマットの画像です。
画像は画面の左上と合わされるので、親設定ファイルで設定した画面の大きさと背景画像の大きさが一致していればピタっと表示されますし、それ以外の場合は画像がはみ出たり(一部が表示されない)、もしくは中途半端に切れたりします。サイズに相違がある場合画像の拡大、縮小処理は行わないので、背景画像の大きさと親設定ファイルで設定する画面の大きさは一致させてください。

回転機で表示する画像

pngフォーマットの画像です。
先ほど説明したとおり、各png画像は回転機で表示されるイメージの上半分ないしは下半分です。
こちらは背景画像と違い、子設定ファイルで設定した回転機のサイズ(縦幅は回転機のサイズの半分)と画像サイズに相違があった場合、縦横ともに引き伸ばしが行われます。ただ、いずれにせよ回転機のサイズと画像サイズは合わせてください。

プログラム上では回転機の切れ目を影にする機能は実装してないので、いわゆる影にあたる部分は画像で表現をしてください。
切れ目は自分で.png