重力計算

重力計算は割といろんなキャラが搭載しているらしいので、この方法より精度のいいやつがあるのかもしれない。
そもそも数学は苦手な部類に入るのでわけわからん
まず、Faighter Factoryをインストールしておくといろいろと楽。

Trigger1 = (P2BodyDist X - (EnemyNear,Vel X * 24)) = [-29, 143]
Trigger1 = (P2BodyDist Y + (EnemyNear,Vel Y * 24 + EnemyNear,Const(Movement.YAccel) * 300) * (P2StateType = A && EnemyNear,Vel Y != 0)) = [-48, -1]

基本的にはこんな感じのトリガー。
上記のやつの赤字の部分を技ごとに合わせて調整する。
まず、24の部分はこの攻撃が発生するまでにかかるフレーム数で、これをFaighter Factoryで調べる。



これが攻撃判定が発生した瞬間で、タイミングを合わせるのはこれになる瞬間なので、青枠の数字から赤枠の数字を引いた値の24となる。
「相手が現在の速度で24F経った時の位置」を計算するわけです。

Y軸の場合はこれに重力を加味しなければなりません。
なので、相手の重力加速度*300を足しています。

(09/10/10 追記)
この300という数字は24+23+22+…+3+2+1=300となります。
何故これをかけるのかというと、キャラクターのスピードというものは1フレームに何ドット動く、という風になっています。
そこに重力というものは、何ドットの部分をプラスするわけです。
例を挙げると、今 9 d/f (ドット/フレーム)だったとすると、重力が 3 だった場合、次のフレームで動く量は 12 d/f になります。
つまり、現時点の速度から考えると、1フレーム後には3増えてて、2フレーム後には6増えてて…24フレーム後には72増えていることになります。
式を立てると (1 * 3) + (2 * 3) + (3 * 3) + … + (24 * 3) となり、ここで 3 を括りだすと 3 * (1 + 2 + 3 + … + 24)となります。
この 3 という数字は相手の重力加速度だったわけですから、上記の式となるわけです。
どうやらこの式、(発生F * (発生F + 1)) / 2でいいらしいですね。
今回の例で言えば、(24 * 25) / 2 = 300
数学ニガテなのでなんでこの式で行けるのか説明がないと分かりませんが…

この計算がかったるいのでこれあげます。

そして範囲を設定します。
左上のメモ帳っぽいアイコンをクリックするとAirファイルの中身が表示されるのでそこを見て設定します。



Clsn1というのが攻撃判定で、いっぱい並んでる数字がその範囲です。
ちなみにClsn2は食らい判定です。
左からX軸左端、Y軸上端、X軸右端、Y軸下端の順で並んでいます。
ここから、どうやらX軸左端では-29が一番小さいようなので-29を、右端は143が一番大きいようなので143を設定。
Y軸も同じような感じで。ただ、最小値が-92なのに-48にしてるのは後ろのほうの当たり判定だからです。最大が-1なのは正の値は地面の下だから。

(09/10/10 追記)
以前は最大を0にしていましたが、0だと問題が発生するかもしれないことに気づいた。詳しくは後述。

Const(Movement.YAccel)は目押しコンボなどの時はGetHitVar(YAccel)にするといいです。
技によってはYAccelの値を変えている場合もあるので。
(P2StateType = A && EnemyNear,Vel Y != 0)を乗算している理由は地上の時にも重力を考慮に入れないためです。
Vel Y != 0は空中ダッシュなどで重力無視してるときのため。

(09/10/10 追記)
どちらかが当てはまると結果が0になります。多分。
だから最大が0じゃマズイんじゃね?と思った。確認してないからわからんけど

重力計算に関してはこんな感じです。
でもこれX軸に関しては重力関係ないね。速度計算と言ったほうがいいか?
そもそもX軸の場合地上だったら摩擦とかもあるし…その辺シカトしてるからX軸の精度は低いと思う。

スレで㍻㌢氏が使っているらしいトリガーを発見したので貼ってみる。

p2bodydist y + (vel y!=0) * (vel y + Const(MoveMent.Yaccel) * n-1) * n
+ (EnemyNear,vel y!=0) * (EnemyNear,vel y + EnemyNear,Const(MoveMent.Yaccel) * n-1) * n = [ , ]

nがフレーム数だそうです。あと実際は1行です。説明のために2行。
1行目が自分の速度を加味した計算、2行目が相手の速度を加味した計算となってるようです。
フレーム数の使い方が若干違うようですが、これが正しいのかなぁ?
例えば相手の位置が0で、速度2、加速度3、フレーム10として計算してみると

私の式 : (2 * 10) + (3 * 55) = 185
氏の式 : (2 + (3 * 9)) * 10 = 290

結果が違うんですよねぇ…
私の式はかなり正確な値が出ているはずなので、氏はあまり正確すぎるのもアレだろうということで緩くしてるのかな?
どーなんだろ。


ガード不能技記憶システム
そのうち。(絶望的、もう覚えてないw)
ナコ月ルル娘のAIに使っているので、見ていただければ解る方は解ると思います。
解りやすいようにコメントも入れてありますので。
わからんって方は催促していただければ書くと思います。
長くなると思うから誰も望んでいないとやる気が…


戻る