4年前から解決策が見つかってない難問誰か解いて
c++、DXlibな者です。
メインループ内で
x*=0.9f;
なりをまわすとぬるっとxが0に近づいていく。
ぬるっとしてるのでUIがリッチっぽくなるけど、
x+=0.1f;
などと違い、フレームレートが変動しても
fps=35;
x+=0.1f*60.f/fps;
みたいに補正することができない。
対策として、フレームレートに応じた値を保持しといて入れ替える
std::array<float,60> temp;
とか、
マリオのジャンプ式
x+=y;
y--;
みたいなのを考えていた。でも、
前者はメモリを食うし小数点以下を考えるとつらみ。
後者も等加速度直線運動なんで精度に難がある。 HTML5のCSSアニメーションには多様なパラメータが用意されていて
少ないコード量で膨大なパターンを手軽に試行錯誤することができる
今回の件であれば
キーフレーム(何ミリ秒後にどういう状態にしたいか)の概念を取り入れるとか、
途中の状態の計算方法としてイージング(ease)を使ってみるとか >>4
ガンダムがアムロの動きに合ってくれないのでマグネットコーティングの塗り方教えてくれ x*=0.9f ^ (60/フレームレート)
じゃダメなのか? cだと^はビット演算なのか
x*=pow(0.9f, 60/fps)ね p+=x*60.0f/fps
x*=pow(0.9f,60.0/fps)
これで行けたわ、9サンガツ
(試験用にHSPで組んだやつ)
repeat 2
if(cnt=0){ fps=60.0 : color 0,0,255 }
else{ fps=75.0 : color 255,0,0 }
p=0.0 : q=0.0 : x=1.0
line 0,0,0,0
repeat int(fps)
q+=60.0/fps
p+=x*60.0/fps : x*=powf(0.9,60.0/fps)
line q*10,p*10
loop
loop
stop