カウンタを徐々に早くする方法&遅くする方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

カウンタを徐々に早くする方法&遅くする方法

#1

投稿記事 by » 15年前

こんにちは。
龍神録を改造して
東方のスペルカードボーナスを実装してるところなんですが、
一つ分からないことがあったのでアドバイスお願いします。
本家東方のスペルカード発生時、
下から上に向かってスペルカード名が移動する動作があるのですが
良く見ると、これって上に上昇するスピードが急激に上がっていき、
止まる直前で急激にスピードが下がってるのですが、
これはどういう計算でカウンタを使って動かしてるのでしょうか?

チルチル

Re:カウンタを徐々に早くする方法&遅くする方法

#2

投稿記事 by チルチル » 15年前

東方でどうやってるかはわかりませんが
龍神録なら物理的移動で再現できるかもしれません

Libra

Re:カウンタを徐々に早くする方法&遅くする方法

#3

投稿記事 by Libra » 15年前

こんな感じでしょうか?

(例)仕様
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:カウンタを徐々に早くする方法&遅くする方法

#4

投稿記事 by » 15年前

チルチル様、Libra様返答ありがとうございます。
>Libra様
位置を動かすのは分かるのですが
速度がだんだん速くする箇所、遅くする箇所が見当たらないのですが
どの部分がそれに該当してるところなのでしょうか?

Libra

Re:カウンタを徐々に早くする方法&遅くする方法

#5

投稿記事 by Libra » 15年前

> >Libra様
> 位置を動かすのは分かるのですが
> 速度がだんだん速くする箇所、遅くする箇所が見当たらないのですが
> どの部分がそれに該当してるところなのでしょうか?


cos波のグラフの傾きが加速度に該当します。

この方法だと、移動する距離によって速さが変わるので、
速さがどのくらいになるかはわかりませんが、
最初に加速、中間の時間で最高速度、その後減速しますし、
時間で位置がきっちり設定できます。

もし、速さを知った状態で処理を行いたいなら、
速さや距離から、かかる時間を求めて計算する必要があります。
ただし、こちらのほうは、かかる時間が速さに依存しますし、
自力で計算しなければいけない部分が増えます。


追記: No:41503で書いた式の0が多かったので修正しておきます^^;

angle = (double)time * PI / 150.0 ;
y = 最終的な位置 + 動く距離 * ( cos(angle) + 1.0 ) / 2.0 ;

そうは問屋の最終兵器

Re:カウンタを徐々に早くする方法&遅くする方法

#6

投稿記事 by そうは問屋の最終兵器 » 15年前

y+=((最終的な位置)-y)/(速さ)

で、それっぽい動きになりますよ。
(速さ)の部分は0に近づくほど速くなります。本家の速さだと15くらいでしょうか。
ただ、あくまでも「っぽい」動きなので、正確に時間などを測りたい場合はLibraさんの方法がいいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る