忍者ブログ
創作用のblog たまに読み返してみたり・・・
管理画面  新しい記事を書く  コメント一覧  トラックバック一覧
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

アルゴリズム考察「ジャンプ」

アクションゲームで定番のジャンプのアルゴリズムについて考えてみます.
J:ジャンプボタンをあらわすとします。

Jを押す→ジャンプする
しかし,すでにジャンプして空中にいる場合は,押しても何もおきません.
そもそもジャンプするって言葉があいまいですね・・・。
逆にジャンプしてないときはなぜ地面にいるのか?
これは重力が働いているからに他なりません。
つまり,ジャンプ(地面を蹴る)という行為は下向きの重力加速度を超える
上向きの加速度を自機にかけることです。

つまり・・・
Jを押す→上向きの加速度がかかる。

しかし、次のような問題があります。
「Jを押し続けると自機がいつまでも上に向って飛び続ける。」

これは,自機のジャンプ力の限界が設定されていないから起こると考えられます.
普通の場合ジャンプは,
ジャンプ開始→上に向って移動→ジャンプの頂点に達する→下に向って移動→着地
なので,ジャンプの頂点に達したら,加速度を下方向に入れ替える必要があります.
そしたら後は自由落下でOKです.

J押す:上方向の加速度かかる
J押し続ける:さらに上方向に加速度かかる
ジャンプの限界に達した:加速度を下方向に変更。
こんな感じでしょうか??
他にも:J押されたときに上向きの初期加速度を与えて,
時間で徐々に減らしていく方法もあります。
この違いでジャンプの性質が大分変わります。

「自由落下」
自機が空中にいるときは,加速度にそった動きをすることになります。
ジャンプの上昇中なら加速度を上方向にかかっているはずですし,
落下中になれば下向きの加速度がかかっているはずです。
これらから速度を割り出し,自機の座標(の変化)させればよいのです。

また自機が地面についているかどうかは,接触のアルゴリズムで判定する必要があります。
現在はある座標よりY座標が下なら地面として実験しています。

さて。現在のアルゴリズムがどうなっているかというと・・・。

----------------------------------------------アルゴリズム案①
・キー入力受付
・X軸移動処理
・ジャンプボタンが押されているか 判定
 YES
        ・現在ジャンプ中でなく(フラグオフ) かつ 1フレーム前にキーはニュートラルだったか?
        YES
        ・加速度に 上方向の数値を代入
        ・ジャンプ中フラグオン
        ・キーニュートラルをオフ
・ジャンプボタンが押されていない かつ ジャンプ中フラグがオフ 判定
   YES
   ・ニュートラルをオン
・画面端 移動不可能処理
・地面に接触しているか 判定
 YES 
  ・地面にめり込まない処理(Y軸固定) 
  ・ジャンプ中フラグをオフ
 NO
  ・落下加速度追加  (ジャンプの上り 下り を同じにしている)
  ・落下加速度がある一定以上にならないような処理
・Y軸移動処理
・アニメパターン決定
・キャラ描画
----------------------------------------------
現在の問題点
・なぜか2段ジャンプ(ニュートラルか、ジャンプ中の条件が間違っているみたい
・ジャンプボタンを押している長さが反映されない。

ぼちぼち直します。

--------------------------------------------------------
状態としてありうるものを羅列します。
・ジャンプ中か?着地しているか?
・直前までジャンプボタンが押されていなかったか?
・現在ジャンプボタンが押されているか?

ジャンプできる状態というのは,
着地していて,直前までジャンプボタンが押されていなかった場合です。

また,着地しているかどうかは,
ジャンプ開始した→ジャンプ中
着地した→ジャンプ中オフ

直前までジャンプボタンが押されていなかったか?
キー入力処理の最後に
「現在ジャンプボタンが押されていない」→「ニュートラル」
というフラグを立てれば実現できます。

そこでまたアルゴリズムを考えてみます。
----------------------------------------------アルゴリズム案②
キー入力処理

(!JUMP){//ジャンプ中じゃない
     IF ジャンプボタンが押されている かつ ニュートラルがオン
    //ジャンプ処理
           ジャンプ中をオン
    上方向の加速度を代入



}else{//ジャンプ中(落下処理:加速度に従った移動)
    加速度に従って移動
    

    IF着地の判定

           //着地処理
    ジャンプフラグをオフ
}
・キャラの座標更新
・キャラの表示処理

IF Jボタンが押されていたら
 ニュートラルオフ
ELSE
 ニュートラルオン

PR
★COMMENT★
NAME:
TITLE:
COLOR
MAIL:
URL:
COMMENT:
PASS: Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
04 2025/05 06
S M T W T F S
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 31
フリーエリア
最新コメント
[09/04 管理人]
[09/02 のす]
[09/01 のす]
[09/01 のす]
[09/01 のす]
最新トラックバック
プロフィール
HN:
coreatoron
性別:
非公開
職業:
???
趣味:
??
自己紹介:
そうさくかつどう~
まぅ~
バーコード
ブログ内検索
アクセス解析
Copyright©創作日記カテゴリ別 All Rights Reserved.
Powered by NinjaBlog
Graphics by ★素材通り★
Template by わらみ~
忍者ブログ [PR]