Ikemen_uuGo新文件ZSS请使用您的计算机查看此文档

.ZSS(ikemen_ugo的新文件)

雨没有眼泪

IKEMEN GO中加入的ZSS(Zantei State Script)是一种状态描述格式,可以代替CNS使用。基本结构与CNS相同,但语法明显不同。

几乎所有的 CNS 描述都可以用 ZSS 代替,局部变量和函数可以作为 CNS 没有的特性。ZSS 可能对以下人员有用:

  • 感觉CNS格式是多余的。

  • 想要压缩或重用代码。

  • 不喜欢多次描述复杂的过程。

  • 有编程经验。

  • 在 ZSS 中,用于#注释代码行而不是;

————————————————- ——————————

common1.cns.zss 可以作为示例。对比一下原来的common1.cns,可以帮助你理解如何正确使用它。

如果您使用 Notepad++,请考虑安装ZSS 语法荧光笔。

这里有一份简短的手册,供了解 MUGEN CNS 的人使用。

——————————————— ——————————

 #  评论在ZSS

 # 您可能会注意到“;” 字符现在替换为“#”字符。

#这是因为 ”;” 现在用于分隔 sctrls 中的参数而不是注释 

——————————————— ——————————

加载 ZSS

指定在字符 def 文件中键入 CNS 文件名的 ZSS 文件。
字符可以混合 CNS 和 ZSS 代码,只要它们位于单独的文件中。

描述 ZSS 的文件扩展名固定为 .zss。

例子:

st1 = kfm.zss

如果引用的文件丢失但存在相同的文件名和附加的 .zss 扩展名,也可以加载 zss 文件。

示例:文件名

common1.cns.zss

示例:def 文件中的描述。(在[Files]下

stcommon = common1.cns

——————————————— ——————————

ZSS怎么写

Statedef 定义

ZSS 由一系列 Statedef 组成,很像 CNS。
Statedef 定义及其所有选项(参数)都写在[]括号内。

示例:CNS

[Statedef 0]

type = S ;行为状态

physics = S;物理状态

sprpriority = 0;图层状态

示例: ZSS

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

要指定值,请写入:而不是=
写入多个参数时,使用;分隔它们。
Statedef 参数定义总是以;

上面的例子也可以写成如下(缩进无关紧要)

[Statedef 0;  

type: S

 physics: S

 sprpriority: 0;]

在 Statedef 下定义编写状态代码。

——————————————— ——————————

状态控制器

State controller name {parameter name: value}

;状态控制器名称{参数:值}

之后出现状态控制器名称这个词会使用:sctrl代替

ZSS 中的状态控制器以与 CNS 类似的格式编写,但触发器不是 sctrl 定义的一部分。

示例: CNS

[State 展示样品]

type = PosAdd;类型位置加

trigger1 = 1;触发器

x = 10;参数:值

示例: ZSS

PosAdd{x: 10}

写入多个参数时,使用;分隔它们。

示例:CNS

[state 示例样本] 

type = PosAdd 

trigger1 =

x = 10 

y = –10

示例:ZSS

PosAdd { x : 10 ; y : – 10 }

;替代展示

PosAdd{x: 10

       y: – 10 ; }

在没有参数的状态控制器上{}留空

示例:ZSS

Turn{}#转向

示例:CNS

[State 0, 转向]

type = Turn

trigger1 = 1

——————————————— ——————————

if语句

在到目前为止的示例中,周围区域没有写入任何内容,因此每帧都执行 Statedef。

ZSS 使用if语句而不是 CNS 触发器。
用法与典型编程语言中的“if”语句大致相同。

"if" conditional statement {code to be executed}

“if”条件语句{要执行的代码}

示例:CNS

[State 展示样品] 

type = PosAdd 

trigger1 = time =

x = 10

示例:ZSS

if time = 0 {     PosAdd { x : 10 } }

if使用与 CNS 触发器相同的条件语句。
If 代码添加在条件语句之后,并包含在{}{}只有在if满足条件时才执行其中的代码。

当你想放置多个条件时,你可以这样写:

示例: CNS

[State 展示样品]

type = PosAdd

triggerall = time = 0

trigger1 = stateType = S

trigger2 = stateType = C

trigger3 = stateType= L

x = 10

示例: ZSS

if time = 0 {

    if stateType = S || stateType = C || stateType = L {

        PosAdd{x: 10}

    }

}

您可以将if语句放入if语句中以编写更复杂的条件。
一个if语句测试它的条件并相应地执行它的{-part 或它的else-part。else 部分是可选的。
当您编写嵌套 ifs 时,您还可以将两者ifelse在同一行中(所谓的elseif语句)

;===========这句话需要学过代码的人理解

示例: CNS

[State 展示样品]

type = PosAdd

triggerall = time= 0

trigger1 = stateType= S

y = -50

[State 展示样品]

type = VelAdd

triggerall = time = 0

trigger1 = stateType = A

y = 0.1

[State 展示样品]

type = PosSet

triggerall = time = 0

trigger1 = stateType != S

trigger1 = stateType != A

y = -20

示例: ZSS

if time = 0 {

    if stateType = S {

        PosAdd{y: -50}

    } else if stateType = A {

        VelAdd{y: 0.1}

    } else {

        PosSet{y: -20}

    }

}

——————————————— ——————————

gnoreHitPause 和 Persistent

使用IgnoreigHitPause无视命中暂停。
使用Persistent用于指定执行帧之间的间隔。
应受 IgnoreHitPause 和 Persistent 影响的代码需要包含在 {} 中。
它们可以单独使用,也可以作为if语句的一部分(之前键入if
与 CNS 不同的是 IgnoreHitPause 不是一个单独的 sctrl 参数(除了 Explod,它允许任意设置此参数)

示例:CNS

[State 展示样品] 

type = PosAdd

 trigger1 = 1

 x = 10

 ignorehitpause = 1

示例:ZSS

IgnoreHitPause {

     PosAdd { x : 10

}

示例: CNS

[State 展示样品]

type = PosAdd

trigger1 = 1

x = 10

persistent = 5

示例: CNS

Persistent(5) {

    PosAdd{x: 10}

}

可以同时指定 IgnoreHitPause 和 Persistent。如果您指定多个,请将if语句放在最后。

示例:CNS

[State 展示样品] 

type = PosAdd

 trigger1 = Time = 0

 x = 10

 ignorehitpause = 1

 persistent = 5

示例:ZSS

IgnoreHitPause  Persistent ( 5 ) if  time  0 {

     PosAdd { x : 10

}

——————————————— ——————————

关于 Var

在 ZSS 中,诸如 Varset 之类的简单 Var 操作已过时。
相反,使用:=
它来操作 Var看起来像一个可以用 CNS 触发器编写的赋值表达式。

示例: CNS

[State Sample]

type = VarSet

trigger1 = 1

Var(59) = 1

示例: ZSS

Var(59) := 1;

示例: CNS

[State 展示样品]

type = VarAdd

trigger1 = 1

Var(59) = 1

示例: ZSS

Var(59) := Var(59) + 1;

添加;在赋值表达式的末尾。

如果要将 Var 分配给另一个字符,请指定重定向到该字符。示例:中枢神经系统

[State 展示样品]

type = ParentVarSet

trigger1 = 1

Var(59) = 1

示例: ZSS

Parent, Var(59) := 1;

——————————————— ——————————

局部变量(ikemen_go新内容,需要懂编程,不懂也无所谓)

只能在定义的状态内使用且不影响其他状态的变量。
最多可设置 256 个。
主要用于传递状态中的一次性变量或以数字方式传递函数。

局部变量声明

写成这样的形式:在最后
let < variable name > = value;

让 < 变量名 > = 值;

让变量的值等于

;结束

例子

let randomValue100 = Random%100;

意思为让随机变量100等于一个随机0-999除以100取余的值

如果以后要更改此值,请以完全相同的方式编写。
请记住,所有将值放入局部变量的描述都是这种格式。

引用局部变量

用途:$ Variable name

            $变量名

引用上面例子中声明的变量。

$ randomValue100

——————————————— ——————————

Functions;(方法)

一个函数是一组进程。
一个函数,它允许您调用和执行您之前在与 Statedef 不同的位置编写的工作,从状态内部调用。

不用写一个要多次使用的流程,可以把流程抽象成函数的形式,只写调用语句。

在 CNS 中,要实现的功能越复杂,代码就越复杂。但是,在ZSS中,这可以通过使用函数在一定程度上解决。

方法定义

用: Function FunctionName()

        Function 方法名()

类似于 Statedef 定义。

示例:在 KO 期间播放语音的功能。

[Function PlayKOSound()]

PlaySnd{value: 11,0}

如果需要,您还可以编写参数和返回值。

[Function FunctionName(argumentName) return valueName]

调用函数

call FunctionName();

call 方法名

写成: 只有写在调用状态上面的函数才能被调用,所以要注意调用的顺序。

示例:调用上面编写的 PlayKOSound() 函数:
call PlayKOSound ();

您还可以使用call FunctionName(argument);
以下方法包含参数: 有关详细信息,请参见下文。

函数参数

函数可以接收参数并对其进行处理。这可用于编写输入不同的进程。
参数列在括号内,并用逗号分隔。

示例:以参数中指定的音量播放声音。

[Function PlayKOSound(VoiceVolume)]

PlaySnd{

    value: 11,0;

    volumeScale: $VoiceVolume;

}

  • 函数将接收到的参数视为局部变量。
    要调用它,我们使用: call PlayKOSound(200);call PlayKOSound(50);

可以使用多个参数。 

示例:上述功能还具有设置频率的能力。

[Function PlayKOSound(VoiceVolume, Frequency)]

PlaySnd{

    value: 11,0;

    volumeScale: $VoiceVolume;

    freqMul: $Frequency;

}

函数返回值

函数可以将值返回给调用者。返回值可以通过写在函数定义之后来指定。返回值可以分配给变量。

带有返回参数的函数示例:


[Function IshelperID() ret]

let ret = 0;

if ishelper(1) {

    let ret = 1;

} else if ishelper(2) {

    let ret = 2;

} else if ishelper(3) {

    let ret = 3;

} else if ishelper(4) {

    let ret = 4;

} else if ishelper(5) {

    let ret = 5;

}

在这种情况下,指定了返回值ret[Function IshelperID () ret]
,可以检索例如像这样这个值:

let helperIdValue = call IshelperID();








资源下载: