main BBS › フォーラム › システム・仕様系Q&A › E-moteキャラクターは吉里吉里のどのlayerにあるのでしょうか? › 返信先: E-moteキャラクターは吉里吉里のどのlayerにあるのでしょうか?
E-moteオフィシャルです!
E-moteキャラはKAGのレイヤ系とは異なる座標系で動いています。
そのため、KAGのレイヤとそのまま合わせてスクロールさせるにはちょっとした工夫が必要です。
E-moteのカメラオフセットアニメーション機能を使って「およそ同程度」に合わせることになります。
画面の横幅が800で、画面外にE-moteキャラと背景をスクロールアウトし、再び画面にスクロールインするケースで、3パターン紹介します。
1) 加速度の指定がない場合
シンプルに、レイヤはmoveタグで、emoteキャラはcxofs属性で動かします。
[move layer=0 path="(-800,0,255)" time=1000] [emoteopt seg=0 cxofs=-800 time=1000] [wm] [emotewait seg=0] [p] [move layer=0 path="(0,0,255)" time=1000] [emoteopt seg=0 cxofs=0 time=1000] [wm] [emotewait seg=0] [p]
2) 加速度の指定がある場合1
moveタグのaccel属性による加速度指定とemoteoptのeasing属性による加速度指定は、計算式が違うため挙動が一致しません。
そこで、元からずれて動くことを前提として「キャラが少し先に画面外へ出る」「キャラが少し遅く画面外へ入る」ように数値を指定します。
例としては以下のようになります。
[move layer=0 path="(-800,0,255)" time=1000 accel=2] [emoteopt seg=0 cxofs=-800 time=900 easing=0.7] [wm] [emotewait seg=0] [p] [move layer=0 path="(0,0,255)" time=1000 accel=-2] [emoteopt seg=0 cxofs=0 time=900 easing=-0.8] [wm] [emotewait seg=0] [p]
3) 加速度の指定がある場合2
moveタグのスプライン指定を使って、E-moteキャラのeasing指定をエミュレーションする手法で一致させます。
まず、以下のような補助関数を定義します。
[iscript] function easing_path(x1,y1,opa1,x2,y2,opa2,easing,div=10) { var exp; if (easing == 0) exp = 1; else if (easing > 0) exp = easing + 1; else exp = 1/(-easing + 1); var result = ""; for (var i = 1; i <= div; i++) { var r = Math.pow(i/div,exp); result += "(%d,%d,%d)".sprintf(x1+(x2-x1)*r, y1+(y2-y1)*r, opa1+(opa2-opa1)*r); } return result; } [endscript]
この関数を使って、地点1から地点2へ移動するパスをeasingで加速度をかけた状態で生成し、moveタグに渡します。
(エンティティの仕組みで関数に引き数を渡して計算するので、開始地点の座標値も指定する必要があります)。
デフォルトでは経路を10分割して計算しているので、moveタグのtime属性は、emoteoptタグのtime属性の10分の1を指定します。
[move layer=0 path="&easing_path(0,0,255,-800,0,255,2)" time=100 spline=true] [emoteopt seg=0 cxofs=-800 time=1000 easing=2] [wm] [emotewait seg=0] [p] [move layer=0 path="&easing_path(-800,0,255,0,0,255,-2)" time=100 spline=true] [emoteopt seg=0 cxofs=0 time=1000 easing=-2] [wm] [emotewait seg=0] [p]
ご確認いただけますでしょうか。
どうぞよろしくお願いいたします!