ページ 1 / 1
だんだん目標物に寄ってくるプログラムについて
Posted: 2010年5月08日(土) 02:38
by kai
龍神録を改造してます。
例えばの話なんですが、
ボスの真上に重ねてボールを表示させるとして、
ボスが右に移動した場合、"20カウントかけて"ボスが移動した地点までボールを右に移動させる
ボスが左に移動した場合、"20カウントかけて"ボスが移動した地点までボールを左に移動させる
みたいに時間をかけてボールを動かして表示させたいのですが
計算式がどうもうまくいかなくて困ってます。
下のプログラムまで考えたのですが、うまくいきません…
どうすれば出来るのか、どなたか分かる方がいましたら教えてください。
よろしくお願いします。
#define X_TIME 20 //何カウントかけてボールを移動させるか
eff.real_x = (int)(boss.dx+FX+dn.x);
if( eff.disp_x < eff.real_x ){
int add_x = eff.real_x - eff.disp_x;
eff.disp_x += add_x / X_TIME + X_TIME;
if( eff.disp_x > eff.real_x ){
eff.disp_x = eff.real_x;
}
}
DrawGraph(eff.disp_x , eff.disp_y , img_ball[0] , TRUE);

Re:だんだん目標物に寄ってくるプログラムについて
Posted: 2010年5月08日(土) 03:20
by ideyan
えーと、これは「ボスが右に移動~」の場合の処理ですか?
具体的にどううまくいっていないのか知りたいところです。
とりあえずソースから読みとれる突っ込みとしては……
>eff.disp_x += add_x / X_TIME + X_TIME;
ここは、20+α加算される処理になっている上に
add_x / X_TIME が (int)/(int)で、小数点以下切り捨てになっています。
仮に
float add_x = eff.real_x - eff.disp_x;
eff.disp_x += add_x / X_TIME;
みたいに直したとしても、
そのフレームでの残りの距離の20分の1進むという処理になってしまって
理論上はいつまでたっても追い付けなくなります(笑
私だったら、ボスが移動したときにeff.real_xの書き換えをし、
毎フレームの移動量の計算をして変数に持たせておいて、
後は毎フレームでその移動量を加減算していくとか、
今何カウント目なのかを記録する変数などを用意しておいて計算するとかの
方法をとると思います。
Re:だんだん目標物に寄ってくるプログラムについて
Posted: 2010年5月08日(土) 09:04
by ookami
おはようございます。ookamiです。
"20カウントかけて" について念のため確認したいのですが、以下の2つのうち、イメージされているのはどっちでしょうか?
1.ボスが移動を始めるのと同時に、ボールもゆっくり移動を開始して、20カウント後に追いつく
2.ボスが移動を始めてから20カウントはボールは停止しており、その後に移動を開始して、さらに20カウント後に追いつく
念のため、ボスは左右だけに動いて、ナナメ移動はナシということで合ってますか?
Re:だんだん目標物に寄ってくるプログラムについて
Posted: 2010年5月08日(土) 09:12
by kai
>えーと、これは「ボスが右に移動~」の場合の処理ですか?
そうですね。左は考えていませんでした。
分かりやすい例でいうと
1:12~
[nico]http://www.nicovideo.jp/watch/sm6573517[/nico]
このボスの周りを回転してる円の
「ボスに寄ってくる座標」を求める計算式を知りたいのですが
どのような計算式なのでしょうか?
Re:だんだん目標物に寄ってくるプログラムについて
Posted: 2010年5月08日(土) 09:16
by kai
>ookamiさん
1、ですね。
>ボスは左右だけに動いて、ナナメ移動はナシということで合ってますか?
左右が出来れば、上下もxをyに変えて追加すればいいので
必然的に斜めの移動も可能だと考えているのですが
Re:だんだん目標物に寄ってくるプログラムについて
Posted: 2010年5月09日(日) 08:24
by ユーリ
う~ん難しいですね
Re:だんだん目標物に寄ってくるプログラムについて
Posted: 2010年5月09日(日) 10:07
by ookami
えぇと、
> 1、ですね。
というのと、
>このボスの周りを回転してる円の
>「ボスに寄ってくる座標」を求める計算式を知りたいのですが
というのの関係がよく分かりませんが、
こんなのはイメージ近いんでしょうか。disp_x,y と real_x,y はdoubleかfloatでないとうまく行かないかもしれませんが。
double PRM=0.1; // 0~1で指定。1に近いほどすばやく対称に近づく
eff.disp_x = eff.real_x*(1.0-PRM) + eff.disp_x*PRM;
eff.disp_y = eff.real_y*(1.0-PRM) + eff.disp_y*PRM;
Re:だんだん目標物に寄ってくるプログラムについて
Posted: 2010年5月10日(月) 06:04
by kai
>ookamiさん
まさにその計算式でした。
ただ、試した結果、正しくは
eff.disp_x = eff.disp_x*(1.0-PRM) + eff.real_x*PRM;
eff.disp_y = eff.disp_y*(1.0-PRM) + eff.real_y*PRM;
で、eff.disp_xとeff.real_xが逆ですね。
それでも、その計算式は思い浮かばなかったので
非常に助かりました。ありがとうございました。