今日はバグ鳥で疲れたからやめるけど、次はアレだな。アピアランスのクラスを作るってところ。アピアランスのエディタを作れば、新作アピアランスをみんなに作ってもらえるじゃない!アピアランスに音を加味するのも忘れずにね。
さて、今、たとえば「アピアランス」のためにどれだけのファイルがあるかというと、
背景ファイル 256*192ドット ビットマップ
点のファイル1 横24*縦24ドットが4つ(後ろ3つはハイライト時のアニメーション用)+ ビットマップマスク
点のファイル2 横24*縦24ドットが4つ(後ろ3つは残像表示時のアニメーション用)+ ビットマップマスク
現実には、以上のファイルはXPMファイルに変換して読み込んでいます。
線のデータ 線のデータ用にGLnRgnというクラスを用意して、ここにベクトルデータを書く。ベクトルデータは
0<=x<=20,-5<=y<=5 の範囲の閉じた折れ線によるリージョンの列。たとえば、標準アピアランスモードの線のデータは、
背景ファイル 256*192ドット ビットマップ
点のファイル1 横24*縦24ドットが4つ(後ろ3つはハイライト時のアニメーション用)+ ビットマップマスク
点のファイル2 横24*縦24ドットが4つ(後ろ3つは残像表示時のアニメーション用)+ ビットマップマスク
現実には、以上のファイルはXPMファイルに変換して読み込んでいます。
線のデータ 線のデータ用にGLnRgnというクラスを用意して、ここにベクトルデータを書く。ベクトルデータは
0<=x<=20,-5<=y<=5 の範囲の閉じた折れ線によるリージョンの列。たとえば、標準アピアランスモードの線のデータは、
LnRgn[0]._PT[0]=wxPoint(0,5);
LnRgn[0]._PT[1]=wxPoint(20,5);
LnRgn[0]._PT[2]=wxPoint(20,-5);
LnRgn[0]._PT[3]=wxPoint(0,-5);
LnRgn[0].SetGRgnBrush(255,64,255,BgR,BgG,BgB);
LnRgn[0]._LGTH=4;
LnRgn[0]._LineWidth=5;
LnRgn[0]._LineLength=20;
LnRgn[1]._PT[0]=wxPoint(0,3);
LnRgn[1]._PT[1]=wxPoint(20,3);
LnRgn[1]._PT[2]=wxPoint(20,-3);
LnRgn[1]._PT[3]=wxPoint(0,-3);
LnRgn[1].SetGRgnBrush(64,64,255,BgR,BgG,BgB);
LnRgn[1]._LGTH=4;
LnRgn[1]._LineWidth=4;
LnRgn[1]._LineLength=20;
LnRgn[2]._PT[0]=wxPoint(0,0);
LnRgn[2]._PT[1]=wxPoint(18,0);
LnRgn[2]._PT[2]=wxPoint(18,-2);
LnRgn[2]._PT[3]=wxPoint(0,-2);
LnRgn[2].SetGRgnBrush(192,192,255,BgR,BgG,BgB);
LnRgn[2]._LGTH=4;
LnRgn[2]._LineWidth=4;
LnRgn[2]._LineLength=20;
NLnRgn=3;
とこれだけ。LnRgn[0]はハイライト時の部分。BgR, BgG, BgBは背景色。(残像表示時に中間色を作る必要があるため。)_LineWidthという変数はあまり意味がないが、極端に幅広な線を書こうと思ったら役に立つだろう。きっと。
このGLnRgnを編集できるようなエディターを作りたい。どうすればいいんだろうか?座標を手で入れさせるなんていうのは最低ですよねえ。(自分は紙にデッサンして手で入れてますけど。)
線のデザインは最初はビットマップを目指していたのだけれど、ビットマップの回転に時間がかかりそうだったのであえなく却下。