>>250 は、歩きながらのジャンプができないんじゃないかい?

>>247 出来るだけわかりやすくするためステート分岐を使わずに説明すると、こんな感じになると思う。

●向き={左、右}:初期値はどっちでも可
if(右を押す) then 向き←右
if(左を押す) then 向き←左

●水平移動量={-1, 0, +1}:初期値0
●垂直移動量(上がプラス):初期値0
●着地中のフラグ{true,false}:初期値はfalse

着地中のフラグ←false
垂直移動量-=重力加速度
if(垂直移動量がマイナス(下向き)かつ移動後に地面にめり込む見込み){
  垂直位置Yを地面の高さに補正
  着地中のフラグ←true
}
if(着地中==true){
  水平移動量←0
  if(右を押す) then 水平移動量←+1(右)
  if(左を押す) then 水平移動量←-1(左)
  垂直移動量←0
  if(ジャンプボタン) then 垂直移動量←ジャンプ初速度(正の定数)
}else{
  // 水平移動量は維持
}
X(水平位置)+=水平移動量
Y(垂直位置)+=垂直移動量