一定期間更新がないため広告を表示しています
タグハンドラをいい気分で使っていると、ときどき思いもしないところでエラーが出たりします。私がはまったのは[emb]タグでした。おやおやと思ってMainWindow.tjsを眺めてみると、ハンドラを定義している部分になぜかembが見当たりません。何故? つーかここに定義してないってことは、一体どこで[emb]を捕まえてるんでしょう。
まあ細かいことは後々解明していくとして、とりあえず計算結果を文字として表示するためだけにKAGに戻り、また[iscript]でTJSに入るのもなんだかバカバカしい話です。要はメッセージレイヤに文字を描画できればいいわけで。
吉里吉里のLayersクラス自体が文字描画をサポートしているので、その辺のリファレンスを眺めながらhogeろうかと思ったんですけど、これだとちょっと不都合があります。フォント設定やハイパーリンクが効かないんですな。そこで、仕方が無いので、MessageLayerクラスのprocessCh()メソッドをたたくことにしました。
とりあえず[emb]はこれにて落着。……あー、でもコンダクタ通してないからウェイトがかからないんだよなぁ。これ、何とかならないかな……。
うちのサイトを改装したタイミングで「ごあいさつ」の文章を書き換えたんですけれども、そこでちょっとだけ触れた「TJSからKAGタグを使う」お話について。
吉里吉里作者のW.Deeさんがどこかで発言されてましたが、KAGってのはTJSの一種のラッパーなんですな。ラッパーというのは金管楽器ではなくて、何ていったらいいかな。ええと。まあひとことでいえば「小難しい機能を簡単に使うために一段かませるもの」というあたりでしょうか。
吉里吉里はTJSスクリプトの実行エンジンですから、TJSで書かれたものしか解釈できませんが、TJSを書こうと思うとJavaScriptを書ける程度の知識が必要になってしまい、それでは敷居が高くなってしまいますし、第一ノベルゲームのように文章がメインのものを作るときにはとても面倒です。そこでTJSで書かれた機能を簡単に扱えるように体系化しようという思想のもとに作られたのがKAGシステムで、つまるところKAGってのは一皮剥けばTJSスクリプトの集合体なわけです。
逆にいえばTJSでKAGシステムの機能を呼び出すことも可能です。ちょっと前まで私はMainWindow.tjsのメソッドを直接呼ぶという傍目には危険な行為をしていたんですが、最近はタグハンドラを拝借してKAGシステムにアクセスするようにしています。(多分)安全だし、何といってもKAGタグリファレンスという形でリファレンスが整備されているので、大変開発しやすくていい感じです。
タグハンドラというのは具体的にはkag.tagHandlersという辞書配列で、それぞれのタグは、タグ名をキーとするクロージャとして格納されています。なので、例えば[l]タグを書こうと思ったら、
kag.tagHandlers.l();と記述すればいいわけです。タグの引数は無名の辞書配列としてクロージャに渡されます。例えば[link]なんかだと、
kag.tagHandlers.link(%["target" => "*hoge"]);っていう感じ。これはあちこちで使えそうでしょ。実際、あちこちで使ってます。