返信先: E-moteキャラクターは吉里吉里のどのlayerにあるのでしょうか?

main BBS フォーラム システム・仕様系Q&A E-moteキャラクターは吉里吉里のどのlayerにあるのでしょうか? 返信先: E-moteキャラクターは吉里吉里のどのlayerにあるのでしょうか?

#13498 返信

emote_ofc
キーマスター

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]

ご確認いただけますでしょうか。
どうぞよろしくお願いいたします!