イージング関数の計算式を設定
setease p1,p2,p3
p1 : 出力される最小値(実数値) p2 : 出力される最大値(実数値) p3 : 計算式のタイプ値
決められた範囲の数値を任意の計算式で補間するイージング関数の設定を行ないます。 ここで指定された設定は、イージング関数(getease,geteasef)で値を取得する際に反映されます。 計算式のタイプ値には、以下を指定することができます。 マクロ名 補間内容 ------------------------------------------------------------ ease_linear リニア(直線補間) ease_quad_in 加速(Quadratic) ease_quad_out 減速(Quadratic) ease_quad_inout 加速→減速(Quadratic) ease_cubic_in 加速(Cubic) ease_cubic_out 減速(Cubic) ease_cubic_inout 加速→減速(Cubic) ease_quartic_in 加速(Quartic) ease_quartic_out 減速(Quartic) ease_quartic_inout 加速→減速(Quartic) ease_bounce_in バウンス効果(入) ease_bounce_out バウンス効果(出) ease_bounce_inout バウンス効果(入出) ease_shake_in シェイク効果(入) ease_shake_out シェイク効果(出) ease_shake_inout シェイク効果(入出) ease_loop 補間のループ(*) (*)で示されたタイプは、他のタイプに付加することができます。 計算式のタイプ値が省略された場合は、以前に設定された値がそのまま使用されます。 イージング関数は、自然な動きのアニメーションを得るための基本的な計算をサポートします。 たとえば、X座標が100だった物体を、X座標200まで50フレームのアニメーションで移動させるとします。 通常であれば、1フレームごとにX座標を100,102,104,106…というように2ずつ加算して新しい座標を得ることでアニメーションとなります。 しかし、これは直線的な動きにしかなりません。イージング関数は、フレームごとの座標を特定の計算式から取得することができます。 計算式の設定によって、ゆっくり移動を開始して、加速しながら移動、目標の前でまた減速するといった有機的なアニメーションを実現できるほか、放物線を描いてバウンドするような動き、振り回す(シェイクする)ような動きなど様々な用途に使用することができます。 イージング関数を使用するには、まずsetease命令で値が変化する範囲と、計算式を指定します。 ; イージング関数の設定 setease 100,200,ease_cubic_inout 上の例では、100から200までの値を得るためのイージング関数をease_cubic_inoutの計算式で設定します。 次に、getease または geteasef関数により実際の値を取得します。 geteaseと、geteasefは基本的に同じもので、取得される値が整数値か、実数値かが異なります。 通常の座標を扱う場合は、整数値として取得しても問題ありません。(イージング関数の内部ではどちらも、実数による計算が行なわれています) ; イージング関数の設定 setease 100,200,ease_cubic_inout i=0 repeat redraw 0 color 0,0,0:boxf ; 画面をクリア x = getease(i,50) ; イージング値の取得(整数) color 255,255,255 pos x,100 : mes "●" redraw 1 await 30 i=i+1 loop getease関数の引数は、getease(時間経過値,最大値)となります。 時間経過値は、0から始まる整数値で、最大値で指定された値までを指定します。 つまり上の例で言えば、getease(0,50)は、setease命令で設定した100から200までの範囲でのスタート値、つまり100が返されます。 時間経過値が増えるごとに、100から200に向けて返される値も増加していきます。そして、getease(50,50)になった時に200が返るような計算式になっています。 時間経過値が0の時 = setease命令で指定した出力最小値が返される 時間経過値が最大値の時 = setease命令で指定した出力最大値が返される 最大値のパラメーターを省略した場合は、4096が使用されます。 geteasef関数の場合も、引数はgeteasef(時間経過値,最大値)と変わりません。 ただし、時間経過値、最大値ともに実数を使用することができ、より細かい精度でイージング関数を利用できます。また、geteasef関数で最大値のパラメーターを省略した場合は、1.0が使用されます。 通常は、時間経過値がマイナスの値だった場合は、0とみなされます。また、時間経過値が最大値を超えた場合も、最大値として扱われます。 ただし、setease命令による計算式のタイプ設定で、ease_loop(補間のループ)を加算した場合は、範囲外の値も含めて補間のループ(繰り返し)を行ないます。補間のループでは、時間経過値にしたがって出力最小値、出力最大値を往復するような動きになります。 イージング関数は、馴れないうちは結果が想像しにくいところがありますが、使いこなすことで高度なアニメーションを手軽に利用することができる便利な機能です。 また標準で内蔵されている命令のため、HSP3DishやHGIMG4などあらゆるランタイムでも同様に呼び出すことができます。
バージョン | 3.5 |
作成日 | 2017/09/08 |
著作者 | onitama |
URL | http://hsp.tv/ |
備考 | ver3.5標準命令 |
タイプ | 内蔵命令 |
グループ | 基本入出力制御命令 |
対応環境 |
|
hs ファイル | hsphelp\i_stdio.hs |