とりあえず簡単に説明しますと、「ジャンプ」というのは 「上に動いた後、だんだんスピードが下がり、最終的に下に動いて、地面で止まる」 という動作のことです。(実際はもっと細かいですが・・・ これをプログラムっぽくすると 「Yが減った後、少しずつYの減る値を減らしていき、結果、Yが増えて、主人公の下のマップ画像が地面の所でYが動かないようにする。」 となります。 ポイントは4つ。 ////////////////////////////////////////// 「Y」を「Yの減る値」で動かすきっかけ。 「Yの減る値」を減らすこと。 「Y」が増えること。 「Y」を「Yの減る値」で動かさないきっかけ。 ////////////////////////////////////////// 一見、複雑そうですが、ゆっくりやれば簡単です(゚∀゚) /////////////////////////////////////////////////////////////////////////// まず一つめ、「Yの減る値」をどう表現するかきめましょう(´o`)ノ 定番なのは「vy」という変数を作って、そこに数字を入れるやり方です。 例)vy = 5; /////////////////////////////////////////////////////////////////////////// では二つめ、「Y」を「Yの減る値」で動かすきっかけをどうするか?(゚Д゚)? 難しく聞こえますが、要するにジャンプするにはどうするか、という意味です。 例)スペースボタンを押す /////////////////////////////////////////////////////////////////////////// 次に三つめ、「Yの減る値」を減らすこと。をプログラムでどう書くか。 これは悩まなくておk(ry 例)vy-=0.1; 例2)vy--; /////////////////////////////////////////////////////////////////////////// 四つめ、「Y」が増えること。 ここが結構ポイント、単純に「y+=vy」でも良いんですが、 それだと「vy」を増やす命令が必要になってきます。(だんだん落ちるスピードが速くなるため) でも、そんな必要ありません。(理由は後で分かります) ここはスルーしましょう(´ω`*) /////////////////////////////////////////////////////////////////////////// そして五つめ、「Y」を「Yの減る値」で動かさないきっかけ(-ω-+) 要するにジャンプが終わるきっかけです。 ジャンプって・・・最後、どうなりますか? ・・・漠然としすぎて分からないかも知れませんが・・・ 「足が地面に付く」ことで終わります。 これをプログラムでどう表現するかと言うと・・・ 例)$map.getAt(x,y+16) == $pat_地面 ※予め「地面」という画像を作って、マップとして設置する。 ※「y+16」というのは、ジャンプしている人の中心から16下、つまり足元のこと。 となります。 /////////////////////////////////////////////////////////////////////////// では繋げてみましょう。 while(1) { //ジャンプのスピード vy=5; //スペースボタンが押されたら if (getKey(32) == 1) { while (1) { //これが無いと始まりません。 y-=vy; //重力の感じを表現します。 vy-=0.1; //地面を突き抜けるわけには行きません。 if (vy < 0 && $map.getAt(x,y+16) == $pat_地面) break;*1 update(); } update(); } *1 「break」繰り返しから抜け出します。 //////////////////////////////////////////////////////////////////////////// まずvyを設定、スペースボタンでループに突入します。 最初の50フレームは、「上昇」です。yからvyが引かれます。 しかし、それ以降は「下降」です。 一見、何も変わっていないように見えますが、実際には「vy」が「マイナスの値」になっているので 結果的にYが増えます。 そして地面の判定。 「vy < 0」 というのはvyがマイナスの時、つまり下降中という意味です。 「落ちている時に足下が地面の画像ならループを抜ける」という処理になります。 //////////////////////////////////////////////////////////////////////////// Σ(゜Д゜) 分かりづらい・・・|||orz||| こんな駄文が参考になれば幸いです(・ω・`)