2016.04.2415:24

AI HELPER-4 重力加速度计算(加强版)

Episode 4 重力加速度计算(加强版)

找到一个比较空闲的Helper,确定这个helper是常时存在的,并且至少有3个fvar可以使用

加入下面的代码(加在helper里面),如果变量有冲突那就换,下面的也一样

;-----------------------------------------------------------------------
;重力加速度 常時読み取り
;-----------------------------------------------------------------------
[State -3, 重力加速度]
Type = Null
Trigger1 = fvar(3):= 0 || 1
Trigger1 = fvar(3):=(((EnemyNear(Root,var(58)),Anim != [5051,5059])&&(EnemyNear(Root,var(58)),Anim != [5061,5069]))&&(EnemyNear(Root,var(58)),StateNo = 5050))*25 || 1 ;这个参考Statedef 5050里面的数据(被打下落,hitfall)
Trigger1 = fvar(0):= Ceil((EnemyNear(Root,var(58)),Pos Y - fvar(2) - fvar(1))*1000.0)*(EnemyNear(Root,var(58)),Pos Y < fvar(3))/1000.0 || 1 ;fvar(0)为第一次pos y记录,fvar(1)为第二次,fvar(2)为第三次
Trigger1 = fvar(1):= EnemyNear(Root,var(58)),Pos Y - fvar(2) || 1
Trigger1 = fvar(2):= EnemyNear(Root,var(58)),Pos Y || 1
ignorehitpause = 1

原理的话是这样,因为敌方pos y为变化值,fvar(0)先记下来第一次pos y,fvar(1)记下来第二次,fvar(2)记下来第三次

第一次的值减去第三次的值在减去第二次和第三次这两次的变化的值即为最终答案

下面给出用法,这个写在Statedef -2里面

;-----------------------------------------------------------------------------
; AI用重力加速度計測
;-----------------------------------------------------------------------------
[State -2, yaccel]
Type = VarSet
TriggerAll = NumHelper(AAA) ;AAA为helper的ID
TriggerAll = EnemyNear(var(58)),Vel Y != 0
TriggerAll = EnemyNear(var(58)),Pos Y < (((EnemyNear(var(58)),Anim != [5051,5059]) && (EnemyNear(var(58)),Anim != [5061,5069])) && (EnemyNear(var(58)),StateNo = 5050))*25 ;参考Statedef 5050
TriggerAll = fvar(20) != Helper(AAA),fvar(0)
Trigger1 = EnemyNear(var(58)),StateNo != [5000,5210]
Trigger2 = EnemyNear(var(58)),MoveType != H
FV = 20
Value = Helper(AAA),fvar(0);(通常時のyaccel値) ;通常的yaccel由helper内计算值取代
IgnoreHitPause = 1

[State -2, yaccel]
Type = VarSet
TriggerAll = EnemyNear(var(58)),Vel Y != 0
TriggerAll = EnemyNear(var(58)),MoveType = H
TriggerAll = EnemyNear(var(58)),Pos Y < (((EnemyNear(var(58)),Anim != [5051,5059]) && (EnemyNear(var(58)),Anim != [5061,5069])) && (EnemyNear(var(58)),StateNo = 5050))*25 ;参考Statedef 5050
TriggerAll = fvar(20) != EnemyNear(var(58)),GetHitVar(yaccel)
Trigger1 = EnemyNear(var(58)),StateNo = [5000,5210]
FV = 20
Value = EnemyNear(var(58)),GetHitVar(yaccel);(打撃当てた時のyaccel値) ;敌方被打的yaccel
IgnoreHitPause = 1

;敵が空中じゃない時
[State -2, yaccel]
Type = VarSet
Trigger1 = fvar(20) != 0 && EnemyNear(var(58)),Vel Y = 0
FV = 20
Value = 0;(打撃当てた時のyaccel値)
IgnoreHitPause = 1

然后用DisplayToClipBoard查看fvar(20)的变化即可,大家不妨去试试看,然后理解下

好了,今天的课就先到这,如果您有什么问题的话可以私信我,我会第一时间给您答复,或者把问题发到我的邮箱

mizore@kotori.moe, 谢谢大家!

アクセス

オンライン