X



4年前から解決策が見つかってない難問誰か解いて
0001名前は開発中のものです。2020/01/16(木) 19:39:22.13ID:R1+QguPT
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--;

みたいなのを考えていた。でも、
前者はメモリを食うし小数点以下を考えるとつらみ。
後者も等加速度直線運動なんで精度に難がある。
0002名前は開発中のものです。2020/01/16(木) 19:40:28.14ID:R1+QguPT
誰か対策を…そして4年の呪縛から解き放ってくれ…
0003名前は開発中のものです。2020/01/17(金) 03:08:10.39ID:xbKTeYck
HTML5のCSSアニメーションには多様なパラメータが用意されていて
少ないコード量で膨大なパターンを手軽に試行錯誤することができる

今回の件であれば
キーフレーム(何ミリ秒後にどういう状態にしたいか)の概念を取り入れるとか、
途中の状態の計算方法としてイージング(ease)を使ってみるとか
0005名前は開発中のものです。2020/01/17(金) 17:44:47.78ID:dI55HHmX
>>4
ガンダムがアムロの動きに合ってくれないのでマグネットコーティングの塗り方教えてくれ
0006名前は開発中のものです。2020/01/17(金) 20:49:46.75ID:YRNiJPaW
アムロ父が酸素欠乏症だった感じ
0008名前は開発中のものです。2020/01/19(日) 12:41:27.38ID:naY6xUXg
x*=0.9f ^ (60/フレームレート)
じゃダメなのか?
0009名前は開発中のものです。2020/01/19(日) 12:55:01.10ID:naY6xUXg
cだと^はビット演算なのか
x*=pow(0.9f, 60/fps)ね
0010名前は開発中のものです。2020/01/19(日) 18:43:23.28ID:6oYVQhv+
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
レスを投稿する


ニューススポーツなんでも実況