控制语句
一般我们做出的决定,都是根据情况而定的。KSP内含了三种控制语句,来在不同情况下运行不同代码:if,select与while。
if…else…end
下例中的if…else…end(如果……否则……终止)控制语句浅显易懂:
on note if($EVENT_VELOCITY > 80) play_note($EVENT_NOTE+12,$EVENT_VELOCITY,0,-1) message("loud " & $EVENT_VELOCITY) else message("soft " & $EVENT_VELOCITY) end if end on
如果条件$EVENT_VELOCITY > 80为真(True),程序便会运行if分支下的代码;如果条件为假(False),else分支下的代码就会运行。else分支是可选的,换言之可以不写。
if()语句使用end if结束。
select()
select()语句(选择语句)是if..else..end的复杂版本:
on note select($EVENT_VELOCITY) case 1 to 40 message("Script message: key struck SOFT") case 41 to 100 message("Script message: key struck MEDIUM") case 101 to 126 message("Script message: key struck HARD") case 127 message("Script message: key struck BRUTAL") end select end on
select语句与if语句十分相似,但select语句下的分支数是任意的。关键字select后的语句会被程序评估,判断其与哪个case后的条件匹配。程序找到匹配的case分之后,会立即执行此分支下的语句。case分支后的条件,既可以是单个常数,也可以是数值范围(表记形式为x to y)。
select语句使用end select结束。
while()
理论上,while语句是if语句的持续版本,因此也可以称其为当型循环(while loop)。下例中的代码模拟了曼陀林震音(mandolin tremolo)。
on note wait(70000) while($NOTE_HELD = 1) play_note($EVENT_NOTE,$EVENT_VELOCITY,0,70000) wait(70000) end while end on
$NOTE_HELD是一个内建变量,当有按住的音符触发回调函数时,其值为1,否则为0。用户按住音符时,KSP会运行while循环中的内容,也就是说此程序会先演奏一个音符,等待片刻,再继续演奏,如此循环。
当用户释放琴键时,$NOTE_HELD的值为0,while的条件不被满足,因此循环内的语句被程序忽略,回调函数终止。
while()语句使用end while结束。