サンプルコードのダウンロード
では、まずサンプルコードをダウンロードし、解凍してください。
私はVisual C++6.0でコンパイルしているので、お持ちの方はVisual C++でプロジェクトファイルを開いてください(「game_10.dsw」をダブルクリックすれば開けます)。
圧縮ファイルに含まれる「game_10.exe」をダブルクリックし、実行してみてください。
どうでしょう?画面が切り替わり、フルスクリーン化すると思います。
そして、スペースキーを押すと、スライムがジャンプすると思います。
というわけで今回は、ジャンプについて解説したいと思います。
ジャンプ
さて、ジャンプと言うと重力が関係してくるので、なんとなく物理法則(奇数の法則だったかな・・・忘れた)っぽいものを思い浮かべそうですが、そんなムツカシー法則は一切
使いません(爆。第6回 慣性の時と処理が似ている(というかほとんど一緒)のですが、違うのは、Y座標に進む値(今回はsy)に重力として毎回一定の値を足すだけです。
ではサンプルコードを見ていきます。
今回は画面下が地面という設定にします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | //----------[ メイン関数 ]---------------------------------------------------------------------- int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow){ <略> int cx=320-16; float cy=448.0f; float sy=0.0f; //メインループ while (1){ WaitSet(); //現在の時間(単位:ミリ秒)取得 ClearScreen(lpBack); //バックバッファ初期化 DdTextOut(lpBack,0,0, "スペースキーでジャンプ pauseキーで終了" ,255); //ジャンプ開始 if (keyg[32] && cy==448.0f) sy=-12.0f; //ジャンプ力 cy+=sy; //慣性(? sy+=0.3f; //重力を加える if (cy>=448) //画面より下に行かないようにする cy=448.0f; //キャラクタ表示 BltClip(lpBack,cx,( int )cy,32,32,lpWork,0,0,1); Flip(); //フリップ Wait(1000/60); //メッセージループへ } |
自然落下は、空から地面に向かって重力によって加速しながら進んでいきますよね?
車で言えば、どんどんアクセル踏んでスピード出して加速していくようなものです。
で、今回のプログラムの場合、syがスピードのようなものになり、重力によってそのスピードが
どんどん増加していく形になります。