HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0412
崩壊プラグ新しいEaseの関数「outin」1解決


崩壊プラグ

リンク

2015/4/12(Sun) 18:46:06|NO.68513

こんにちは、HSPは5年ほど使わせていただいています。

最近ゲーム中の演出を書いていて思いついたのですが、
現在、setEase命令で指定できる関数に、以下のような関数を、
ease_xxx_outin(xxxはcubicなど)という名前で追加するのはどうでしょうか。

「減速しながら、最大値・最小値の真ん中でいったん静止し、その後加速する」

y = x ^ 3の、xが0付近のyの動きです。
一応、上のようなアニメーションは、現行バージョンv3.4では
・最初と最後に分割する


repeat xx setEase 0, 100, ease_cubic_out pos getEase(cnt, xx), 0 await 24 loop repeat xx setEase 100, 200, ease_cubic_in pos getEase(cnt, xx), 0 await 24 loop

・3次関数を直接書く


repeat xx*2 x = powf(cnt - xx, 3) / powf(xx, 3) * 100 + 100 pos x, 0 await 24 loop

などという方法で書けますが、
前者はアニメーションする部分の記述が倍になってしまいますし、
後者は始点・終点の設定がしづらいコードとなってしまっています(中心点を設定して動く幅を指定)。
(ちなみに、カレントポジションは両方ほぼ同じ動きをします。)

このEase関数、どう思いますか?
(もしすでに実装予定でしたらごめんなさい...)



この記事に返信する


掘木

リンク

2015/4/12(Sun) 20:32:43|NO.68520

そんな関数追加されてましたっけそういえば。
使う気がないものはどんどん忘れますねえ。

この手の動作は何かしら使いやすいように整形したものを
みんな持っているもんだと思っていたのだけれど。

それっぽく整形したらこんなになるんカナ。

#module dim cubrange dim cubcounttmp dim divtmp #deffunc SetCubicOutinEase int minnum_,int maxnum_,int type_ minnum = minnum_ maxnum = maxnum_ type = type_ return #define ctype cub(%1) ((%1)*(%1)*(%1)) #defcfunc GetCubicOutinEasef double nowcount,double terminalcount if terminalcount < 0 : return GetCubicOutinEase(-nowcount,-terminalcount) if terminalcount == 0 : return minnum if nowcount < 0 { if ( type & ease_loop ) : return GetCubicOutinEase(-nowcount,terminalcount) return minnum } if ( terminalcount < nowcount ){ if ( type & ease_loop ){ divtmp = terminalcount * int(nowcount/terminalcount) if (int( nowcount / terminalcount ) \ 2 ){ return GetCubicOutinEase(terminalcount-(nowcount-divtmp),terminalcount) }else{ return GetCubicOutinEase(nowcount-divtmp,terminalcount) } }else{ return maxnum } } cubrange = cub( double(terminalcount) ) cubcounttmp = cub( double(nowcount) * 2 - terminalcount ) + cubrange cubcounttmp = cubcounttmp / (cubrange * 2) return ( cubcounttmp * maxnum + ( 1.0-cubcounttmp) * minnum ) #defcfunc GetCubicOutinEase int nowcount,int terminalcount return int(GetCubicOutinEasef(nowcount,terminalcount)) #global
実際こんなのでいいのかさっぱり分からないけど。

追記:ループ処理部分に剰余演算子を使っていた不具合を修正するため一回記事消去。



ONION software Copyright 1997-2021(c) All rights reserved.