“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

206.HSPでゲームを作ろう:標準スプライトのマップ表示を使ってアクションゲームを作る その4

この手のゲームのキモといえる、ジャンプについて考える。
サンプルプログラムは、スペースキーを押したら、ジャンプする高さは一定。ジャンプ中も左右の入力によって移動できる。
使っているのは、es_gravity命令での重力設定と、ジャンプしたときにY移動値を設定すること。

まずはこれをベースにジャンプさせてみる。

es_gravity命令で設定できる重力は、XとY座標系で指定でき、値のプラスマイナスで方向が変わる。
これで、上下左右に重力のかかる方向を決められる。
また、値の基準があって、256を設定すると、1フレームあたり、1ドットの加速度になる。

ジャンプさせるには、es_apos命令など、自動移動する命令を使えばよいのだが、サンプルプログラムでは、直接es_setp命令を使って、Y移動値を設定していた。

jump=-10
es_setp 0,ESI_SPDY,jump<<16	

これをstick命令でZキーを押したときに実行する。ただ、ちゃんと床にいるときであることを判定しないと、空中でジャンプし放題になるw
移動した後のマップとの接触判定は、es_get命令で、ESI_MOVERESの値を取得して参照できるようだ。

取得した値にESSPRES_GROUNDが含まれていれば、床に着地している状態と判定できる。

jump=-10

stick key
if key&2048 {	;ジャンプ処理
  if myres&ESSPRES_GROUND {	; 着地しているかチェック
    es_setp 0,ESI_SPDY,jump<<16	; Y移動値のみを設定
  }
}

これでZキーを押すとジャンプして、重力があるので、自然に着地する。
ここまでは簡単だったのだが、ゲームの味付けとしてジャンプといえば、某N社のMさんのジャンプ挙動がしっくりくる。

一番影響するのは、重力の値。基準値の256にすると、ジャンプも落下もちょっと早く感じる。
そこで、設定値を半分の128にしてみる。
単純に1/2の重力になったことになる。ジャンプさせると、ふんわりジャンプになるけど、その分、高く飛び上がる。

次に影響するのは、ジャンプ力。Y移動値に設定する値を小さく(マイナス方向が上なので)すれば、高く飛び上がる。
この二つの値をうまく決めて調整していこう。

重力256の時のジャンプ
重力128の時のジャンプ


本当はボタンを押した長さで、ジャンプの高さを調整できるようにしようと思ったが、es_gravity命令の重力下にあるスプライトに対して、加速度を可変させると、二段ジャンプしているような不自然なものになってしまった。

いったん割り切って、小ジャンプ、大ジャンプのボタンを作って、ゲームの本編となる部分を作っていこう。