マリオのジャンプについて

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

マリオのジャンプについて

#1

投稿記事 by マシュマロ » 14年前

はじめましてです。環境はウインドウズ7、VisualC++(DXライブラリ)
マリオのジャンプみたいに飛びたいんですが、コードで悩んでいます。
調べてみたところ
http://d.hatena.ne.jp/Gemma/20080517/1211010942
上記のサイトにコードが書いてありましたが、変数の意味が分かりません。
y_temp(一時保存場所)
Mario.y(キャラの高さ?画像表示の際のY座標?)
Mario.y_prev(前に進む距離?)
F(適当に値入れていいの?この値はどう変化させるの?)
これら4つの変数の意味や使い方などを教えてください。
お願いします

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: マリオのジャンプについて

#2

投稿記事 by bitter_fox » 14年前

マシュマロ さんが書きました: これら4つの変数の意味や使い方などを教えてください。
y_tempはURL先の二行目でMario.yの値が変わってしまうのでMario.y_prevの為に変わる前の値を保存しています。
Mario.yは現在の位置です。
Mario.y_prevは一つ前の位置に当たります。
Fは加速度に当たります。

このコードでは現在の位置から一つ前の位置を引いたものにFを足したものを現在の位置に足しています。

コード:

y_temp = Mario.y;                          // Mario.yが次の代入で値が変わってしまうので保存しておく(つまり前回の値を保存)
Mario.y += (Mario.y - Mario.y_prev) + F;   // この入力でMario.yは変化(新しいマリオの位置)
Mario.y_prev = y_temp;                     // Mario.y_prevは一つ前なので一つ前に当たるy_tempを代入

マシュマロ

Re: マリオのジャンプについて

#3

投稿記事 by マシュマロ » 14年前

bitter_foxさんお早い回答感謝です。
とても分かりやすい説明で分かりました。

アバター
パコネコ
記事: 139
登録日時: 14年前
住所: 大阪

Re: マリオのジャンプについて

#4

投稿記事 by パコネコ » 14年前

y_temp = Mario.y;
Mario.y += (Mario.y - Mario.y_prev) + F;
Mario.y_prev = y_temp;

まずジャンプしてない時を考えましょう、
マリオの存在している高さは0とします。
Fもおそらく0でしょう。

コード:

y_temp(0) = Mario.y(0);
Mario.y(0) += (Mario.y(0) - Mario.y_prev(0)) + F(0);
Mario.y_prev(0) = y_temp(0);
次のループ時も同じになりますよね。
では
ジャンプする瞬間を考えましょう。
ジャンプする瞬間はF=10としてあげます。

コード:

y_temp(0) = Mario.y(0);
Mario.y(0) += (Mario.y(0) - Mario.y_prev(0)) + F(10);
Mario.y_prev(0) = y_temp(0);
となります。
次に空中なのでF=-1とします。

コード:

y_temp(0) = Mario.y(10);
Mario.y(10) += (Mario.y(10) - Mario.y_prev(0)) + F(-1);
Mario.y_prev(0) = y_temp(10);
Fは空中にある限り-1なので次でも-1です。
現在のそれぞれの値は
y_temp=10;
Mario.y=10+9=19;
Mario.y_prev=10;
F=-1;
です。
次のときは
y_temp=19;
Mario.y=19+8=27;
Mario.y_prev=19;
F=-1;
このままマリオのy座標の式だけみてみましょう
Mario.y=0+10=10;
Mario.y=10+9=19;
Mario.y=19+8=27;
Mario.y=27+7=34;
Mario.y=34+6=40;
Mario.y=40+5=45;
Mario.y=45+4=49;
Mario.y=49+3=52;
Mario.y=52+2=54;
Mario.y=54+1=55;
Mario.y=55+0=55;
Mario.y=55-1=54;
Mario.y=54-2=52;
・・・
足される値がどんどん小さくなっていきます。
空中である限りですが・・・
最初のFの値が大きければ高くジャンプできると言うことになります。
===
すでに解答なされていたようなですが、せっかくなので投稿します。^^;
ニャン!!\(゜ロ\)(/ロ゜)/

マシュマロ

Re: マリオのジャンプについて

#5

投稿記事 by マシュマロ » 14年前

パコネコ、回答してくれて感謝です。
具体的に値を入れてくださってありがとうございます。
おかげで使い方が分かりました。

閉鎖

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