ゲーム制作や雑記などをきまぐれに
Twitter
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
LittleBTのような多段ジャンプの作り方の解説です。
かなり力づくなやり方ですが興味のある方はつづきからどうぞ。
かなり力づくなやり方ですが興味のある方はつづきからどうぞ。
■変数などの準備
まず、主人公キャラは飛行をOFFにしておきます。(ここでは書きませんが、敵キャラの場合は飛行状態で作ります。同じような方法で作れます。)
◆状態を表す変数
歩き、ダッシュ、攻撃中、キャンセル可能状態、仰け反り中、などの状態を表す変数を用意します。
LittleBTの場合、
1:立ち
2:歩き
3:ダッシュ
4~7:キャンセル可能状態
8:攻撃中
9:ガード
・
・
・
13~15:仰け反り、受身・起き上がり可能状態
という感じになっています。空中にいるときは値をマイナスにしています。
単純に多段ジャンプを実装するだけなら、変数が+なら地上、-なら空中という分け方でも大丈夫です。
◆速度を表す変数
縦方向の速度を表す変数を1つ使います。ジャンプの上昇・落下は直線移動を使って再現します。
この変数を使って
変数が100なら上方向に速度10、200なら速度20、-300なら下方向に速度30で移動する
というような処理をあとで作ります。
◆ジャンプ回数変数
ジャンプした回数を表す変数を用意しておきます。この変数は普通に回数を記憶して判定に使うだけの変数です。
■フロー
◆上下左右に移動させるフロー
↓の画像のように
縦が100なら上方向に速度10、200なら速度20、-300なら下方向に速度30で移動
という処理をするフローをひたすら作ります。LittleBTでは速度は5単位(5,10,15,20・・・)でつくっています。また、基本条件で空中にいるときに処理を行うような設定にしてください。

「獲得スコア」がLittleBTの場合での「縦の速度を表す変数」です。キャラ変数2などでも構いません。
SPというのは仰け反り時間などを表しています。必須な条件ではありません。
また、この時、処理時間はなるべく短くなるようにした方がいいです。
処理時間を1.0未満にするには速度と距離(dot)で設定します。
ちなみにこの方法を使えば直線移動で擬似ウェイトを作れます。
素早いモーションを作るにはおそらく必須になるテクニックです。
◆ジャンプの仕組み
1.飛び上がり処理で縦の速度の変数を操作、更に状態を空中にする。
2.上下に勅撰移動させるフローが作動し、上方向に直線移動する。
3.別のフローで毎フレーム縦の速度を減少させる。
4.直線移動の速度が減少していき、最終的に速度が-になり、落下する。
5.床に着地と同時に着地アニメーションをさせ、更に状態変数を地上に戻す。
多段ジャンプは2~4の間に更にジャンプ処理をキャンセル発動させるだけです。2段目も3段目も5段目も仕組みは変わりません。
◆飛び上がり処理
上に移動する処理です。これだけでは落下はしません。
処理は↓のようになります。

基本条件を見てください。
「最大HPが10000である」の部分がジャンプ回数の変数です。LittleBTでは変数が足りないためこんなことをしていますが、キャラ変数2が0の時1の時という感じでもOKです。
コマンドの赤枠を見てください。
まず状態を地上に居る状態から空中にいる状態にします。飛行もONにします。
LittleBTの場合は、-1のときに普通に空中にいる(攻撃などをしていない)という状態としています。更にジャンプ回数の変数(最大HP)、縦の速度の変数(獲得スコア)を操作します。縦の速度の変数をどれだけ操作するかでジャンプの高さなどが決まります。また、フロー操作であとで作る着地処理を終了させたりしないと上手くいかないことがあります。
このフローをまとめると、ジャンプした回数が0の時、初速度50で1段目のジャンプをするという処理になっています。
しかし、ここまでの処理だけではジャンプしたら上方向に等速移動するだけで落下しません。
◆落下処理
落下処理を作ります。↓のようなフローを一つ作ります。基本条件で空中にいるとき実行するように設定しておいてください。

※獲得スコアは縦の移動速度を表す変数の代わりです。
これは毎フレーム縦の速度を減少させる処理です。例えば落下速度変数を50にしていると毎フレーム直線移動の速度が5ずつ(縦の速度変数の値が50ずつ)減少していきます。つまり次のように縦の速度変数と速度が変遷していきます。
Xフレーム後・変数の値・直線移動の速度
ジャンプ直後:500・上に50
1フレーム後:450・上に45
5フレーム後:250・上に25
20フレーム後:-500・下に50
これで直線移動であたかも慣性移動して落下しているように見えます。(落下速度と直線移動のフロー数によっては少しカクつくことがあります)
LittleBTでは縦の速度変数(獲得スコア)から落下速度変数を引いていますが、落下速度変数は直接値を指定してもOKです。
◆落下アニメーション処理
これは↓のように一定の状態の時に設定したアニメーションを再生する処理を作るだけです。

空中にいるときに空中のアニメーションをする、というだけの処理です。
◆着地処理
↓のようになります。

仕組みは簡単です。ブロックに乗った瞬間に状態を空中から地上に変更して適宜アニメーションをするだけです。ジャンプした回数もリセットしておきます。このとき、フローの操作で移動処理のフローを停止させると着地後の隙が作れます。攻撃処理も中断させたほうがいいです。
まとめると、ブロックに乗ったときにジャンプした回数をリセットし、状態変数も空中から地上に戻すという処理になっています。
※この画像では行っていませんが、着地したときは縦の速度変数を0にしておくことを推奨します。
-追記-
基本条件に、縦の速度が-1以下のとき、を追加したほうがいいかもしれません。
◆多段ジャンプ
フロー自体は飛び上がり処理とほとんど変わりません。↓のようなフローを作ります。

基本条件の赤枠を見てください。
状態変数の条件を「空中にいるとき」にしておきます。空中にいるときに実行させたいからです。
「最大HPが20000である」というのは、ようはジャンプ回数変数が1である=ジャンプした回数が1であるということです。
基本条件をまとめると、空中に居てジャンプした回数が1のときにフローを実行するということです。
コマンドの赤枠を見てください。
まず他のジャンプや攻撃の処理を中断するためにフローを終了させます。
あとは飛び上がり処理の時と同じように状態や縦の速度を操作するだけです。
このフローをまとめると、空中に居てジャンプした回数が1のときに初速度50で2段目のジャンプをするという処理になっています。
3段目、4段目、5段目以降も、ジャンプ回数変数の値以外は2段目のジャンプとほぼ同じような処理で作れます。
かなり面倒くさい方法ですがLittleBTはこういう処理を使っています。ちなみに複雑すぎて嫌になったので解説をボツりましたが、攻撃の吹っ飛ばし処理はこのジャンプ処理の応用です。中身を解析したけどもっともっと簡潔かつ軽量な方法があるぜって方は是非是非教えてください。
最後に、この解説通りにジャンプ処理を作ってみたサンプルを置いておきます。
連続攻撃や(ジャンプ)キャンセル攻撃、簡易ガードなども搭載しています。
ダウンロード
まず、主人公キャラは飛行をOFFにしておきます。(ここでは書きませんが、敵キャラの場合は飛行状態で作ります。同じような方法で作れます。)
◆状態を表す変数
歩き、ダッシュ、攻撃中、キャンセル可能状態、仰け反り中、などの状態を表す変数を用意します。
LittleBTの場合、
1:立ち
2:歩き
3:ダッシュ
4~7:キャンセル可能状態
8:攻撃中
9:ガード
・
・
・
13~15:仰け反り、受身・起き上がり可能状態
という感じになっています。空中にいるときは値をマイナスにしています。
単純に多段ジャンプを実装するだけなら、変数が+なら地上、-なら空中という分け方でも大丈夫です。
◆速度を表す変数
縦方向の速度を表す変数を1つ使います。ジャンプの上昇・落下は直線移動を使って再現します。
この変数を使って
変数が100なら上方向に速度10、200なら速度20、-300なら下方向に速度30で移動する
というような処理をあとで作ります。
◆ジャンプ回数変数
ジャンプした回数を表す変数を用意しておきます。この変数は普通に回数を記憶して判定に使うだけの変数です。
■フロー
◆上下左右に移動させるフロー
↓の画像のように
縦が100なら上方向に速度10、200なら速度20、-300なら下方向に速度30で移動
という処理をするフローをひたすら作ります。LittleBTでは速度は5単位(5,10,15,20・・・)でつくっています。また、基本条件で空中にいるときに処理を行うような設定にしてください。
「獲得スコア」がLittleBTの場合での「縦の速度を表す変数」です。キャラ変数2などでも構いません。
SPというのは仰け反り時間などを表しています。必須な条件ではありません。
また、この時、処理時間はなるべく短くなるようにした方がいいです。
処理時間を1.0未満にするには速度と距離(dot)で設定します。
ちなみにこの方法を使えば直線移動で擬似ウェイトを作れます。
素早いモーションを作るにはおそらく必須になるテクニックです。
◆ジャンプの仕組み
1.飛び上がり処理で縦の速度の変数を操作、更に状態を空中にする。
2.上下に勅撰移動させるフローが作動し、上方向に直線移動する。
3.別のフローで毎フレーム縦の速度を減少させる。
4.直線移動の速度が減少していき、最終的に速度が-になり、落下する。
5.床に着地と同時に着地アニメーションをさせ、更に状態変数を地上に戻す。
多段ジャンプは2~4の間に更にジャンプ処理をキャンセル発動させるだけです。2段目も3段目も5段目も仕組みは変わりません。
◆飛び上がり処理
上に移動する処理です。これだけでは落下はしません。
処理は↓のようになります。
基本条件を見てください。
「最大HPが10000である」の部分がジャンプ回数の変数です。LittleBTでは変数が足りないためこんなことをしていますが、キャラ変数2が0の時1の時という感じでもOKです。
コマンドの赤枠を見てください。
まず状態を地上に居る状態から空中にいる状態にします。飛行もONにします。
LittleBTの場合は、-1のときに普通に空中にいる(攻撃などをしていない)という状態としています。更にジャンプ回数の変数(最大HP)、縦の速度の変数(獲得スコア)を操作します。縦の速度の変数をどれだけ操作するかでジャンプの高さなどが決まります。また、フロー操作であとで作る着地処理を終了させたりしないと上手くいかないことがあります。
このフローをまとめると、ジャンプした回数が0の時、初速度50で1段目のジャンプをするという処理になっています。
しかし、ここまでの処理だけではジャンプしたら上方向に等速移動するだけで落下しません。
◆落下処理
落下処理を作ります。↓のようなフローを一つ作ります。基本条件で空中にいるとき実行するように設定しておいてください。
※獲得スコアは縦の移動速度を表す変数の代わりです。
これは毎フレーム縦の速度を減少させる処理です。例えば落下速度変数を50にしていると毎フレーム直線移動の速度が5ずつ(縦の速度変数の値が50ずつ)減少していきます。つまり次のように縦の速度変数と速度が変遷していきます。
Xフレーム後・変数の値・直線移動の速度
ジャンプ直後:500・上に50
1フレーム後:450・上に45
5フレーム後:250・上に25
20フレーム後:-500・下に50
これで直線移動であたかも慣性移動して落下しているように見えます。(落下速度と直線移動のフロー数によっては少しカクつくことがあります)
LittleBTでは縦の速度変数(獲得スコア)から落下速度変数を引いていますが、落下速度変数は直接値を指定してもOKです。
◆落下アニメーション処理
これは↓のように一定の状態の時に設定したアニメーションを再生する処理を作るだけです。
空中にいるときに空中のアニメーションをする、というだけの処理です。
◆着地処理
↓のようになります。
仕組みは簡単です。ブロックに乗った瞬間に状態を空中から地上に変更して適宜アニメーションをするだけです。ジャンプした回数もリセットしておきます。このとき、フローの操作で移動処理のフローを停止させると着地後の隙が作れます。攻撃処理も中断させたほうがいいです。
まとめると、ブロックに乗ったときにジャンプした回数をリセットし、状態変数も空中から地上に戻すという処理になっています。
※この画像では行っていませんが、着地したときは縦の速度変数を0にしておくことを推奨します。
-追記-
基本条件に、縦の速度が-1以下のとき、を追加したほうがいいかもしれません。
◆多段ジャンプ
フロー自体は飛び上がり処理とほとんど変わりません。↓のようなフローを作ります。
基本条件の赤枠を見てください。
状態変数の条件を「空中にいるとき」にしておきます。空中にいるときに実行させたいからです。
「最大HPが20000である」というのは、ようはジャンプ回数変数が1である=ジャンプした回数が1であるということです。
基本条件をまとめると、空中に居てジャンプした回数が1のときにフローを実行するということです。
コマンドの赤枠を見てください。
まず他のジャンプや攻撃の処理を中断するためにフローを終了させます。
あとは飛び上がり処理の時と同じように状態や縦の速度を操作するだけです。
このフローをまとめると、空中に居てジャンプした回数が1のときに初速度50で2段目のジャンプをするという処理になっています。
3段目、4段目、5段目以降も、ジャンプ回数変数の値以外は2段目のジャンプとほぼ同じような処理で作れます。
かなり面倒くさい方法ですがLittleBTはこういう処理を使っています。ちなみに複雑すぎて嫌になったので解説をボツりましたが、攻撃の吹っ飛ばし処理はこのジャンプ処理の応用です。中身を解析したけどもっともっと簡潔かつ軽量な方法があるぜって方は是非是非教えてください。
最後に、この解説通りにジャンプ処理を作ってみたサンプルを置いておきます。
連続攻撃や(ジャンプ)キャンセル攻撃、簡易ガードなども搭載しています。
ダウンロード
PR
この記事にコメントする
カレンダー
プロフィール
ブログ内検索
カテゴリー
最古記事
最新記事
最新CM