画面端にくっついていて後ろに吹っ飛んでいるとき、
見た目のX軸速度は0なのですが、内部的にはX軸速度は存在しており、
そのまま相手のX軸速度を考慮すると相手が後ろに吹っ飛んでいると判断して
攻撃を振りづらくなってしまいます。
というわけで相手が画面端にくっついて後ろに吹っ飛んでいるときは
相手のX軸速度を0と判断して計算するようにしましょう。
私の場合はこんな感じで判断しています。
[State -1, 相手画面端時のX軸速度補正]
type = VarSet
fvar(23) = 0
triggerall = fvar(23) := 1 ;最初にリセット
trigger1 = EnemyNear,BackEdgeBodyDist = 0
trigger1 = EnemyNear,Vel X < 0
trigger2 = EnemyNear,FrontEdgeBodyDist = 0
trigger2 = EnemyNear,Vel X > 0
ignorehitpause = 1
※一部解説に不要な記述は省いています。
fvar(23)を相手のX軸速度にかけるようにしています。
Enemy,Vel X*fvar(23)みたいな感じです
(実際は技の発生速度とかいろいろ書いていますが)。
条件を満たせばfvar(23)は0なのでX軸速度を考慮せず、
条件を満たさなければfvar(23)=1なのでX軸速度はそのまま計算されます。
相手が画面端にくっついているということはBackEdgeBodyDistは0です。
更にそこにX軸速度がマイナスなら画面端に向かって移動していることになります。
facingはBackEdgeBodyDistに内部的に含まれているので
わざわざ判定する必要はありません。
まためくりなどで相手がこちらに背を向けて吹っ飛んでいることもありますので、
FrontEdgeBodyDistを使って同様に判断しています。
画面端限定コンボって実戦では当たり前なのですが、
AIにさせるとなると結構面倒だったりしますねー。
特に相手の加速度や技の発生を考慮など厳密に行動させると
こういう所では逆に作用してしまうこともあるかもしれません。
それでも工夫すれば厳密に計算させることは可能だと思います。
何か間違いがありましたらご指摘ください。
【MUGEN豆知識の最新記事】