ジャンプの実装について
マリオのようなジャンプを実装しようと思い
http://d.hatena.ne.jp/Gemma/20080517/1211010942
上のページの内容を使ってみたんです
たぶんMario.yにいまの座標を入れるんでしょうけど
これMario.y=0のときは[0,10,19, 27, 34, 40, 45,・・・
となりますが
Mario.y=10のときは[20, 32, 43, 52, 60, 67, 73,・・・
となって無駄に高くジャンプしてしまいます
どうすればいいんでしょう?
というか使い方が間違ってるんでしょうか?
(まあ普通は下に行く程座標が大きくなるから逆にしないといけないんでしょうけど)
アクションゲームのジャンプについて
Re: アクションゲームのジャンプについて
ソースを見ないと何とも言えません。
また、マリオはハードの関係でこのような実装になっているようなので、
PCでマリオのようなジャンプを実装したいのなら、この方法にこだわる必要はないと思いますよ。
また、マリオはハードの関係でこのような実装になっているようなので、
PCでマリオのようなジャンプを実装したいのなら、この方法にこだわる必要はないと思いますよ。
Re: アクションゲームのジャンプについて
参照先のコードを貼っておきます。
Fはジャンプしたとき10で空中では-1とするようです。
このコードは今の位置と前回に位置の差(つまり、その速度)に力を加える(加速・減速)ことにより
速度を求め、今の位置に加える(速度による移動を行う)ことによって次の位置を求めるものです。
Mario.y=Mario.y_prev=0で処理を開始すると、確かに結果は[0,10,19, 27, 34, 40, 45,・・・となる
はずですが、Mario.y=Mario.y_prev=10で処理を開始すると、結果は[10, 20, 29, 37, 44, 50, 55,・・・
となるはずです。これがそうなっていないということは、...
単純に考えるとMario.y_prevの初期値が正しくないんではないかと。
このコードは今の位置と前回に位置の差(つまり、その速度)に力を加える(加速・減速)ことにより
速度を求め、今の位置に加える(速度による移動を行う)ことによって次の位置を求めるものです。
Mario.y=Mario.y_prev=0で処理を開始すると、確かに結果は[0,10,19, 27, 34, 40, 45,・・・となる
はずですが、Mario.y=Mario.y_prev=10で処理を開始すると、結果は[10, 20, 29, 37, 44, 50, 55,・・・
となるはずです。これがそうなっていないということは、...
単純に考えるとMario.y_prevの初期値が正しくないんではないかと。
Re: アクションゲームのジャンプについて
えーとですね
どうなるかを知りたかったので単純に
としました。
あと質問が悪かったようなんですが
たとえばF=10をF=3とし
y=0で処理すると0,3,4,5,6,6,5,3,0となりますが
y=2で処理すると4,9,13,16,18,19,19,18,16,13,9,4となります
このとき
y=0のときの最大ジャンプ距離は6で
y=2のときの最大ジャンプ距離は17ですよね?
もしこのまま時機のy座標をそのまま用いて実装しますと
たとえばマリオで地面のブロックからのジャンプと少し上のブロックからのジャンプで
飛ぶ距離が違うことになってしまうという問題が起きてしまうモノですから
どうしたものかと・・・
どうなるかを知りたかったので単純に
int y;
int y_p;
int F;
void Jump(void){
int temp = y;
y += ( (y - y_p) + F);
y_p = temp;
}
void main(void){
y=;
Jump();
printf("%d\n",y);
F=10;
Jump();
printf("%d\n",y);
F=-1;
for(int i=0;i<30;i++){
Jump();
printf("%d\n",y);
}
}
あと質問が悪かったようなんですが
たとえばF=10をF=3とし
y=0で処理すると0,3,4,5,6,6,5,3,0となりますが
y=2で処理すると4,9,13,16,18,19,19,18,16,13,9,4となります
このとき
y=0のときの最大ジャンプ距離は6で
y=2のときの最大ジャンプ距離は17ですよね?
もしこのまま時機のy座標をそのまま用いて実装しますと
たとえばマリオで地面のブロックからのジャンプと少し上のブロックからのジャンプで
飛ぶ距離が違うことになってしまうという問題が起きてしまうモノですから
どうしたものかと・・・
Re: アクションゲームのジャンプについて
y_pが前回の座標を保存しています。
14, 17, 21行でのJump呼び出し時にy_pの値がいくつになっているかを考えましょう。
14, 17, 21行でのJump呼び出し時にy_pの値がいくつになっているかを考えましょう。
Re: アクションゲームのジャンプについて
本当に理解出来たのでしょうか?でしたら前のコードをどのように変えたのか書いてみてください。オーカー さんが書きました:ああなるほど
わかりました
フォーラムルールにも
とあります。また、解決した時は、「解決しました」とだけ言って去らず、ソースコードや解決した方法を明記して下さい。