setease

イージング関数の計算式を設定

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などあらゆるランタイムでも同様に呼び出すことができます。

関連項目

geteaseイージング値を整数で取得
geteasefイージング値を実数で取得

サンプル逆引き (5)

ease_test1.hsp
ease_test1.hsp
ease_test2.hsp
ease_test2.hsp
ease_test3.hsp

情報

バージョン3.5
作成日2017/09/08
著作者onitama
URLhttp://hsp.tv/
備考ver3.5標準命令
タイプ内蔵命令
グループ基本入出力制御命令
対応環境
  • Windows 版 HSP
  • コマンドライン版 HSP
hs ファイルhsphelp\i_stdio.hs