シェルの差分の作り方・基礎

このページでは、サーフェスの変化のある部分だけを切り抜いて、ベースサーフェスに重ねる方法を紹介します。
今後、変化のある部分だけの切り抜きを「差分」と呼びます。

シェルのサーフェスすべてを、表情など変わる部分以外の絵もふくめて用意すると、すごい容量になります。
それにPNAファイルまでついてくるとなると、ファイル数も相当なものになります。
容量が大きければ、ユーザさんのDLの時間やHDDの圧迫にも関わってくるので、軽くしましょう。

0.初めに

すごく簡単な例として、Surface Manを用意しました。
このゴーストを使って説明しています。

&attachref(./surface_basic.nar);

1.必要な部分をピックアップする

まず、Surface Manのマスターシェルを見てください(shell/master)。ごく普通の差分のないタイプのシェルです。
このシェルであれば、顔部分しか変わっていないので、他は余分ということが分かります。
なので、切り抜いてしまいましょう。

&attachref(./i_sb01.png);

変わっているのはグリーンの部分だけなので、surface01.pngとsurface02.pngはこのようになりました。
顔部分だけになってしまったので、surface01.pnaとsurface02.pnaのPNAファイルは不要です。

2.surfaces.txtを書く

今の状態でサーフェスを適用すると、差分失敗のシェル(shell/difference)と同じように、生首だけ表示されてしまいます。
かっこわるいので、surfaces.txtを書き換えましょう。
surface1を例にとると、

surface1
{
collision0,9,153,141,182,Change
}

と現在書かれています。これに「element」を記述します。
elementは差分をどうやって配置するかといった指示をします。
この場合であれば、

surface1
{
element0,overlay,surface00.png,0,0
element1,overlay,surface01.png,20,20
collision0,9,153,141,182,Change
}

となります。
以下にelementの記述を一行づつ解説します。

element0,overlay,surface00.png,0,0

この指示を文章として読むと「0のエレメントにsurface00.pngをx0・y0の位置に重ねます」です。
Surface Manはsurface00.pngがすべてのサーフェスのベースですので、element0にsurface00.pngを指定します。
そして位置指定は、surface0と位置を変えなくていいので、0,0です。

element1,overlay,surface01.png,20,20

これもelement0とほぼ同じ指示です。 一つだけ違うのは、位置指定がされていることです。
これをelement0と同じように0,0に指定してしまうと、顔がものすごくズレます。
surface00.pngのx0・y0に重ねる指定になっているからです。
この位置を指定するには、元の切り出し画像の左上隅からx・yいくつのところから切り出したか、その値を入れればいいわけです。
Surface Manであれば、

&attachref(./i_sb02.gif);

顔部分の左横と上の暗いピクセル数が、surface01.pngの位置指定の値です。
この指定が面倒くさければ、右の例のように、左上隅x0・y0から目的のところまで切ってしまうと楽です。

surface2も同じように記述を加えてください。

3.余分な部分を塗りつぶす

この状態で差分としてはぼぼできているのですが、たぶん差分成功/pna処理失敗のシェル(shell/almost)を適用したときのように、表情が変わると目の上のフチにわずかなジャギーが出ているはずです。
これは個別に差分用のPNAファイルを用意してやっても消せますが、ファイルを増やさずに対処できます。
はみ出している部分を透過色で塗りつぶしてしまいましょう。

&attachref(./i_sb03.png);

これだけです。


最終的に差分成功のシェル(shell/better)と同じになっていれば成功です。
お疲れさまでした。

コメント



添付ファイル: filesurface_basic.nar 1767件 [詳細] filei_sb03.png 1554件 [詳細] filei_sb01.png 1470件 [詳細] filei_sb02.gif 1428件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-03-18 (日) 20:50:02