2007/04/10(火)

文字描画レイヤ このエントリをはてなブックマークに追加 

Filed under: ゲーム制作,吉里吉里 — KAY @ 23:18:30

ようやくお披露目、前からちょくちょく話に出してた文字描画レイヤです。
KAGのMessageLayerは非常によく出来ているのですが、いくつか痒い所に手が届かない部分があったので、それなら自分で作ってしまえと。
……のはずだったんですが、シナリオ側の記述で結構フレキシブルに使えるんですよねMessageLayer。^^;
例えば、リファレンスを鵜呑みにして複数文字にルビを振ろうとすればこういう感じになるんですが……

[ruby text="ひ"]向[ruby text="まわ"]日[ruby text="り"]葵

実際はこんなやり方で均等にルビを配置する事が可能なわけで。
あと、KAGはベタテキストを1文字ずつに分解してchタグとして解釈するので、袋文字を利用している場合に罫線『──』のような、2文字以上がひと続きとなる文字が現れると、2文字目の縁取り部分が前の文字に重なってしまい、文字が途切れてしまうという問題があったんですが(Fateで顕著だった気がする)、これも[ch text="──"]と書いてやる事で簡単に回避できちゃうんですよねー。

というわけで、今回紹介する文字描画レイヤのアドバンテージは、FontクラスのプロパティやdrawText()の引数が全てシナリオファイル側の記述で制御できる、という点くらいに……。
このレイヤクラスは、chなどで文字が送られてきてもすぐに描画するわけではなく、一旦partsと呼ばれるバッファに溜め込み、描画したいタイミング(クリック待ちの直前など)でprint()メソッドを呼び出して一気に描画する、という方法を取っています。
エロゲをインストールしたら即効で文字速度を最速に設定してしまう人用。^^;
まあ、KAGParserがテキストを1文字ごとに分解して吐き出すので、タグハンドラの書き方次第で1文字ごとの描画も全然いけますが。

(続きを読む…)

2007/04/07(土)

KAGで複数文字に渡るルビを振る このエントリをはてなブックマークに追加 

Filed under: ゲーム制作,吉里吉里 — KAY @ 23:52:23

ああなんて事。
KAGでこれが出来ると判ってたら、一からシステム作ろうとは思わなかったかも……。

KAGシステムのrubyタグは、タグが現れた次の1文字に対してルビが振られる、……とリファレンスには書かれています。
まあ間違いでは無いんですが。KAGParserはベタテキストを1文字ずつに分解してchタグとして解釈するので。
でも実際は、内部的には次の1文字ではなく、次に現れるchタグに対してルビが振られる、という挙動を採っています。
なので、こういう風に書いてやると……

[ruby text="ひ ま わ り"][ch text="向日葵"]

あはは……ほら……3文字に渡ってルビが振られるじゃん……。
マクロ化するとこう。

;マクロ定義
@macro name=mruby
@ruby text=%r
@ch text=%text
@endmacro

;使用例
[mruby r="ひ ま わ り" text="向日葵"]

ルビの文字間隔は半角スペースや全角スペースなどで調節する必要がありますが、これで少なくとも文字間隔が不揃いになるという事はなくなります。はぁ……。
近いうちにKAYの作った文字描画レイヤ紹介します。
複 数 文 字 に 渡 る ル ビ を 振 る こ と が 可 能
なやつ。