こんにちは。
龍神録を改造して
東方のスペルカードボーナスを実装してるところなんですが、
一つ分からないことがあったのでアドバイスお願いします。
本家東方のスペルカード発生時、
下から上に向かってスペルカード名が移動する動作があるのですが
良く見ると、これって上に上昇するスピードが急激に上がっていき、
止まる直前で急激にスピードが下がってるのですが、
これはどういう計算でカウンタを使って動かしてるのでしょうか?
カウンタを徐々に早くする方法&遅くする方法
Re:カウンタを徐々に早くする方法&遅くする方法
こんな感じでしょうか?
(例)仕様
1、カウンタ(恐らくボスの時間)が150未満の時位置を計算
2、150以上の時、位置固定
文字位置のy座標は、最初450、最終的に30まで上がる
実装方法
・sin波を使って、位置を決める
多分、このままだと少し違うと思いますが、条件式などを付け加えてうまく調整してください。
追記
cos波を使うと、多分意図したとおりの動きになるかと思います。
angle = (double)time * PI / 150.0 ;
y = 最終的な位置 + 動く距離 * ( cos(angle) + 1.0 ) / 200.0 ;
(例)仕様
1、カウンタ(恐らくボスの時間)が150未満の時位置を計算
2、150以上の時、位置固定
文字位置のy座標は、最初450、最終的に30まで上がる
実装方法
・sin波を使って、位置を決める
double y ; //y:表示y座標位置 double angle ; //角度 if( 1の時 ){ angle = (double)time * ( PI / 2.0 ) / 150.0 ; y = 450.0 - ( 450.0 - 30.0 ) * sin( angle ) ; } else{ y = 30.0 ; } ・ ・ (計算したy座標を使って)文字表示
多分、このままだと少し違うと思いますが、条件式などを付け加えてうまく調整してください。
追記
cos波を使うと、多分意図したとおりの動きになるかと思います。
angle = (double)time * PI / 150.0 ;
y = 最終的な位置 + 動く距離 * ( cos(angle) + 1.0 ) / 200.0 ;
Re:カウンタを徐々に早くする方法&遅くする方法
チルチル様、Libra様返答ありがとうございます。
>Libra様
位置を動かすのは分かるのですが
速度がだんだん速くする箇所、遅くする箇所が見当たらないのですが
どの部分がそれに該当してるところなのでしょうか?
>Libra様
位置を動かすのは分かるのですが
速度がだんだん速くする箇所、遅くする箇所が見当たらないのですが
どの部分がそれに該当してるところなのでしょうか?
Re:カウンタを徐々に早くする方法&遅くする方法
> >Libra様
> 位置を動かすのは分かるのですが
> 速度がだんだん速くする箇所、遅くする箇所が見当たらないのですが
> どの部分がそれに該当してるところなのでしょうか?
cos波のグラフの傾きが加速度に該当します。
この方法だと、移動する距離によって速さが変わるので、
速さがどのくらいになるかはわかりませんが、
最初に加速、中間の時間で最高速度、その後減速しますし、
時間で位置がきっちり設定できます。
もし、速さを知った状態で処理を行いたいなら、
速さや距離から、かかる時間を求めて計算する必要があります。
ただし、こちらのほうは、かかる時間が速さに依存しますし、
自力で計算しなければいけない部分が増えます。
追記: No:41503で書いた式の0が多かったので修正しておきます^^;
angle = (double)time * PI / 150.0 ;
y = 最終的な位置 + 動く距離 * ( cos(angle) + 1.0 ) / 2.0 ;
> 位置を動かすのは分かるのですが
> 速度がだんだん速くする箇所、遅くする箇所が見当たらないのですが
> どの部分がそれに該当してるところなのでしょうか?
cos波のグラフの傾きが加速度に該当します。
この方法だと、移動する距離によって速さが変わるので、
速さがどのくらいになるかはわかりませんが、
最初に加速、中間の時間で最高速度、その後減速しますし、
時間で位置がきっちり設定できます。
もし、速さを知った状態で処理を行いたいなら、
速さや距離から、かかる時間を求めて計算する必要があります。
ただし、こちらのほうは、かかる時間が速さに依存しますし、
自力で計算しなければいけない部分が増えます。
追記: No:41503で書いた式の0が多かったので修正しておきます^^;
angle = (double)time * PI / 150.0 ;
y = 最終的な位置 + 動く距離 * ( cos(angle) + 1.0 ) / 2.0 ;
Re:カウンタを徐々に早くする方法&遅くする方法
y+=((最終的な位置)-y)/(速さ)
で、それっぽい動きになりますよ。
(速さ)の部分は0に近づくほど速くなります。本家の速さだと15くらいでしょうか。
ただ、あくまでも「っぽい」動きなので、正確に時間などを測りたい場合はLibraさんの方法がいいと思います。
で、それっぽい動きになりますよ。
(速さ)の部分は0に近づくほど速くなります。本家の速さだと15くらいでしょうか。
ただ、あくまでも「っぽい」動きなので、正確に時間などを測りたい場合はLibraさんの方法がいいと思います。