看懂common1.cns.zss中的内容(文件位置在data文件夹下)

翻译者:雨没有眼泪

转载已授权

文章首发地址(可获得更好阅读体验):https://www.bilibili.com/read/cv11734193


如果你已经阅读过上一篇文章并且有了一定的自我理解,那么你可以开始本章的阅读了

先是一段公用的ZSS代码(只提取了一小部分进行解释说明,但应该能满足学习需求


#-------------------------------------------------------------------------------


#站立


[Statedef 0; type: S; physics: S; sprpriority: 0;]




if cond(Anim = 5, AnimTime = 0, Anim != 0) {


    ChangeAnim{value: 0}


}


if Time = 0{


VelSet{y: 0}


}


if Time = 4 || abs(Vel X) < ifelse(MajorVersion = 1,


Const(movement.stand.friction.threshold), 2) {


VelSet{x: 0}


}


if !Alive{


ChangeState{value: 5050; ctrl: 0}


}


#你可能会看不懂但没关系下面我会尽我的可能帮助你理解


#====================================================================


# 站立


[Statedef 0; type: S; physics: S; sprpriority: 0;]


; 等价于站立


[Statedef 0]


type = S


physics = S


sprpriority = 0




# ChangeAnim(改变动画)


if cond(Anim = 5, AnimTime = 0, Anim != 0) {


ChangeAnim{value: 0}


}


# CNS和ZSS比对和逻辑


if cond(Anim = 5, AnimTime = 0, Anim != 0) 


# 是怎么完成trigger1-2的条件的


# cond类似于ifelse


# cond(筛选条件, 条件1, 条件2)


# 当筛选条件为真时,执行条件1。当筛选条件为否,执行条件2


# 逻辑为


# anim = 5 时执行条件1 animtime = 0对应trigger1


# trigger1 = anim = 5 && amintime = 0


# anim != 5 时执行条件2 Anim != 0对应trigger2


# trigger2 = anim != 5 && amin != 0




;等价于CNS


[State 改变动画]


type = ChangeAnim


trigger1 = Anim != 0 && Anim != 5


trigger2 = Anim = 5 && AnimTime = 0 ;改变动作


value = 0




# VelSet(速度设置)


if Time= 0 {


VelSet{y: 0}


}


# CNS和ZSS比对和逻辑


if Time = 0


# 这个就比较简单了


# time = 0时为真执行


#等价于CNS


[State 速度设置]


type = VelSet


trigger1 = Time = 0


y = 0




# VelSet(速度设置)


if Time = 4 || abs(Vel X) < ifelse(MajorVersion = 1,


Const(movement.stand.friction.threshold), 2) {


VelSet{x: 0}


}




# CNS和ZSS比对和逻辑


# ifelse语句不做更多解释,参考上面的cond




;等价于CNS


[State 速度设置] ;如果低速度保持4帧以上则停止移动


type = VelSet


trigger1 =abs(Vel X)<ifelse(MajorVersion = 1,Const(movement.stand.friction.threshold), 2)


trigger2 = Time = 4


x = 0


;---------------------------------------------------------------------------------------------------------


MajorVersion为Ikemen的特有触发器


如果 def 文件中的 mugenversion 为 1.0 或更高,则返回 1。


格式:


MajorVersion




参数:





返回类型:


boolean int (1 or 0)


布尔型 int型 1或者0


;---------------------------------------------------------------------------------------------------------


# 内容并不复杂所以不进行解释参考上方的速度设置


if !Alive{


ChangeState{value: 5050; ctrl: 0}


}


#-------------------------------------------------------------------------------


# 站立到蹲下(与站立相同而且内容并不复杂所以不进行解释)


[Statedef 10; type: C; physics: C; anim: 10;]


if Time = 0 {


VelMul{x: .75}


}


if abs(Vel X) < Const(movement.crouch.friction.threshold) {


VelSet{x: 0}


}


if AnimTime = 0 {


ChangeState{value: 11}


}


#-------------------------------------------------------------------------------


# 站立到蹲下(与站立相同而且内容并不复杂所以不进行解释)


[Statedef 11; type: C; physics: C; anim: 11; sprpriority: 0;]




if Anim = 6 && AnimTime = 0 {


ChangeAnim{value: 11}


}


if abs(Vel X) < Const(movement.crouch.friction.threshold) {


VelSet{x: 0}


}


#-------------------------------------------------------------------------------


# 蹲下到站立(与站立相同而且内容并不复杂所以不进行解释)


[Statedef 12; type: S; physics: S; anim: 12;]




if AnimTime = 0 {


ChangeState{value: 0}


}




#-------------------------------------------------------------------------------


# 走路


[Statedef 20; type: S; physics: S; sprpriority: 0;]




if Command = "holdback" {


VelSet{x: Const(velocity.walk.back.x)}


} else if Command = "holdfwd" {


VelSet{x: Const(velocity.walk.fwd.x)}


}




# CNS和ZSS比对和逻辑


# 这里可能涉及到你的知识盲区了,如果你有接触过编程此段代码你可能一下就明白了,但我# 还是会认真说一遍


#if...elseif这是一个编程常用的语句,和mugen中ifelse类似


#上面代码逻辑为


#如果 Command = "holdback"  为真 执行VelSet{x: Const(velocity.walk.back.x)}


#如果 Command = "holdback"  为假


#否则如果 Command = "holdfwd" 真 执行VelSet{x: #Const(velocity.walk.fwd.x)}


#如果都为假那么上面的代码都不会执行


;等价于


[State 示例代码]


type = VelSet


trigger1 = command = "holdfwd"


x = const(velocity.walk.fwd.x)




[State 示例代码]


type = VelSet


trigger1 = command = "holdback"


x = const(velocity.walk.back.x)


#这段不做更多的解释


if Vel X > 0 {


if cond(Anim = 5, AnimTime = 0, Anim != 20) {


ChangeAnim{value: 20}


}


} else if Vel X < 0 {


if cond(Anim = 5, AnimTime = 0, Anim != 21) {


ChangeAnim{value: 21}


}


暂无评论
根据相关规定,发布评论前必须绑定手机前往绑定
你,确定要这么做吗?
正在处理中...