ExtStaffrollプラグイン はじめに: ExtStaffrollプラグインは、スタッフロールを簡単に実現するための KAGプラグインである!ドジャーン!(効果音) 吉里吉里/KAGのデフォルトのプラグインはイマイチ使いづらいので、 もちょっと使えるものを目指して作ってみたというそんな。 特徴: ・スタッフロールの長さは、表示物に合わせて自動的に調整される 最初に「縦はxxxドット予約して…」とか書かなくていい。 ・メッセージレイヤに表示できるものは何でも表示できる スタッフロールさせるレイヤはメッセージレイヤの一つを使うので、 メッセージレイヤに表示できるものならなんでも表示できる。文字 サイズの変更とか色変更とか、graphで画像表示とかも自由自在。 そんかし、ややメモリ食い。 ・スタッフロールの終了時、画面に文字や画像を残したまま終われる スタッフロール最後のサークルロゴを中央に残してフェードアウト、 なんてのが気楽に作れる ・スタッフロールにかかる時間を指定できる 曲にあわせてスタッフロールを終了する、のが簡単にできる 制限: 今はまだ縦書きに未対応。要望がある人は、是非そのアツい思いをアツく 綴ってお知らせ下さい。自分では必要にならない限り実装しない故。 使い方: ちょっとややこしい。典型的には以下のような形。 ; 最初に一度だけプラグイン読み込み [call storage="ExtStaffroll.ks"] ; まず初期化 [staffroll_init layer=message0] ; 文字列を描画 [staffroll_set storage=スタッフロール.ks target=*スタッフロール文字列] ; スタッフロール開始 [staffroll_start time=10000] ; 終了まで待つ。この前に背景のトランジションだとかの効果を入れればいい [staffroll_wait canskip=true] ; スタッフロールを完全に終了する [staffroll_end] ===== スタッフロール.ks ========================================= *スタッフロール文字列 [nowait] [style align=center] [font size=32]スタッフロール[resetfont][r] [resetstyle] [r] [graph storage=なんか画像 char=false][r] まぁそんなカンジ[r] [endnowait] [return] タグリファレンス [staffroll_init layer=message# width= height= vertical= interval= ...] 説明: スタッフロールオブジェクトを初期化し、KAGPluginとして登録する。 既に登録されていた場合は、自動的に以前の登録を削除して再登録し直す。 その他、色々初期化する。layer= 以外の引数には [staffroll_setopts] のものがそのまま使用できる。 引数: layer=message0(def) スタッフロールで使用するレイヤを指定する。"message#" で なければならない。 width=画面横幅(def) 横書き(vertical=false)時、スタッフロール画面の横幅を指定する。 縦書き時は横幅は自動調整されるので無効。 height=画面縦幅(def) 縦書き(vertical=true)時、スタッフロール画面の縦幅を指定する。 横書き時は縦幅は自動調整されるので無効。 left=0(def) 横書き時のスタッフロール画面の表示横位置を指定する。 縦書きでは無効。 top=0(def) 縦書き時のスタッフロール画面の表示縦位置を指定する。 横書きでは無効。 margin[lrtb]=0(def) メッセージ画面のマージンを指定。 vertical=true|false 縦書きかどうかを指定する。デフォルトでは、指定されたメッセージ レイヤの vertical に従う。 ※現在、縦書き未対応なので指定するとスゴいことになるかも。 interval= スクロール用タイマのinterval(ms)。def=33.33333(1/30秒に一回 スクロールする)。1/60秒(=16.66667)にすると結構重いので、 最低環境を落としたい場合は 1/20秒(=50.0) とか 1/15秒(=66.66667) にするといい…けど当然その時はスタッフロールの移動がガクガクに なる。環境に合わせて動的に書き換えるとかやってみては如何? [staffroll_setopts ...] 説明: スタッフロールオブジェクトのオプションを設定する。 正直あんまテストしてないから、可能なら [staffroll_init]で全部指定 して下さいお願い。あ、でもintervalはテストしたな…。 [staffroll_set storage= target= clear= page=] 説明: スタッフロールに表示する文字列やら画像やらを設定するKAGスクリプトを 指定する。簡単に言えば文字表示するためのKAGそのもの。最終行にも [r]が必要(行の高さを改行ルーチンをフックすることで測っているから)。 内部的に messagelayer.clear()を呼んで画面をクリアしているため、 他のメッセージレイヤがクリアされることはない。 ちなみに、必ず表画面に描画されるので注意。 引数: storage= スタッフロール文字列を設定するルーチンがあるストレージ target= スタッフロール文字列を設定するルーチンのラベル名 [call]で呼び出すので、最後が[return]で終わっている必要あり。 文字表示部分を[nowait]/[endnowait]で囲うこと。[call]すると [nowait]とかの指定が元に戻ってしまうので、このマクロ中で 設定することができないため。 clear=true(def)|false [staffroll_init]で指定したレイヤをクリアするかどうか。 複数のスタッフロールを組み合わせる場合にfalseを指定する。 例えば、前半のロールと後半のロールがそれぞれ二種類(前A、 前B、後A、後B)あり、前Aと後Bを組み合わせたものを流すには、 以下のように指定する。 [staffroll_set storage=xxx target=前A] [staffroll_set storage=xxx target=後B clear=false] これで、前Aの後に後Bを接続したものをスタッフロールにできる。 page=fore(def)|back|both レイヤのどちらに描画するか。defaultではforeのみ。 [staffroll_start time= startdisp= enddisp=] 説明: スタッフロールを開始する。 引数: time= スタッフロールにかかる時間を指定する。 startdisp=0(def) スタッフロールの開始位置を指定する。例えば横書きなら、 デフォルトでは画面下から開始されるが、100などと指定すると 画面上に100ドット表示された状態から開始される。 スタッフロールエリアが画面よりも小さく、それをマスクする 画像を上に重ねている場合などに使う。 enddisp=0(def) スタッフロールの終了位置を指定する。例えば横書きなら、 デフォルトでは画面上まで流れてしまうが、100などと指定すると 画面上に100ドット残った状態でスタッフロールが終了する。 最後に表示される「著作・製作:XXXX」を、画面中央に 留めたい場合に使う。その用途のために作ったし、他の用途を 思いつかん。 [staffroll_wait canskip= lastpos=] 説明: スタッフロールの終了を待つ 引数: canskip=true|false(def) スキップ可能かどうか。def=false(スキップ不能) lastpos=true(def)|false スキップされた時、最終位置に移動するかどうか。def=true(最終 位置に移動する) [staffroll_stop lastpos=true/false] 説明: スタッフロールを強制停止する 引数: lastpos=true(def)|false スキップされた時、最終位置に移動するかどうか。def=true(最終 位置に移動する) [staffroll_end] 説明: スタッフロールを終了する。動作中なら[staffroll_stop]で停止してから 終了する。作成していたclassや登録されていたKAGPluginなど、不要な ものは全て解放する。Staffrollし終わったら、これやっといた方が、 メモリが無駄にならない。 引数: なし ちょっと裏側の話: メッセージレイヤの reline() を気持ち悪くフックしているので 気持ち悪い。もっと簡単に作る方法ないかしらん。