外部設定ファイルを仲介する構造体的クラスが必要
以前マップチップを表示してスクロール処理ができるクラスを作りました。↓
これって、クラスの設定をXMLで行います。XMLを引数にとって内容に沿ったマップを描画します。そのXMLファイルは以下のような感じです。
<map> <mapSize> <width>64</width> <height>48</height> </mapSize> <chipSize> <width>25</width> <height>25</height> </chipSize> <screenSize> <width>16</width> <height>12</height> </screenSize> <loopMode>true</loopMode> <layer> <scrollSpeed>1</scrollSpeed> <animateTime>25</animateTime> <frame> 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 134 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 166 166 166 166 166 166 0 0 0 0 0 0 166 166 166 166 166 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 1 2 2 2 2 3 135 0 0 0 0 136 1 2 2 2 3 135 0 0 0 0 0 0 0 0 0 0 0 0 166 71 33 129 66 66 66 67 135 0 0 0 0 136 65 66 66 101 35 70 0 0 0 0 0 0 0 0 0 0 0 136 1 2 165 35 38 134 134 134 0 0 0 0 0 0 134 134 39 33 161 3 135 0 0 0 0 0 0 0 0 0 0 136 65 66 66 67 135 0 0 0 0 0 0 0 0 0 0 0 136 65 66 67 135 0 0 0 166 166 0 0 0 0 0 0 134 134 134 134 0 0 0 0 0 0 0 0 0 0 0 0 0 134 134 134 0 0 0 166 2 3 135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 1 34 35 70 166 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 33 34 161 2 3 135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 1 165 34 34 34 35 70 166 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 33 34 34 34 34 161 2 3 135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 1 165 34 34 34 34 34 34 35 70 166 166 166 166 166 166 166 166 166 166 166 166 166 166 166 166 166 166 166 166 166 71 33 34 34 34 34 34 34 34 161 2 2 2 2 2 2 2 2 2 2 2 194 2 2 2 2 2 2 2 2 2 2 2 165 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 </frame> </layer> <layer> <scrollSpeed>0.5</scrollSpeed> <animateTime>10</animateTime> <frame> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 0 0 0 0 0 0 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 0 0 0 0 0 0 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </frame> <frame> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 166 166 166 166 0 0 0 0 0 0 166 166 166 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 0 0 0 0 0 0 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 0 0 0 0 0 0 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 34 34 34 34 34 34 34 34 0 0 0 0 0 0 34 34 34 34 34 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </frame> </layer> </map>
これって、そのまんまXMLを渡すよりも、このXMLの構造に沿った構造体的なクラスを介した方がいいっぽいことに気付きました。
MapSettingクラスとでもして、setMapDataメソッドでXMLでデータを渡す。そのときうまくメンバ変数にデータを展開できなければ、XMLのどのデータで失敗したのかとかの入力データチェックをやります。もちろん直接メンバ変数にデータを設定することも可能。このクラスをMapChipViewerクラスに渡すことで、その設定に沿ったマップを描画すると。この方が健康に良さそうです。
さらにこのクラス自体にloadメソッドを持たせて、外部XMLファイルを読み込み、メンバ変数に展開...とかはやりすぎか。
DBにデータを設定したりとかの外部データのI/Oには仲介する構造体を用いるのって、わりと常識なんですかね?