From 7b8c444fb32c301b34dc7361b3170356d05da545 Mon Sep 17 00:00:00 2001 From: tocque <364004564@qq.com> Date: Sat, 10 Nov 2018 00:00:31 +0900 Subject: [PATCH] type:switch --- _server/blockly/MotaAction.g4 | 2 +- docs/event.md | 64 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4 index 7d06015d..f7ee0fcd 100644 --- a/_server/blockly/MotaAction.g4 +++ b/_server/blockly/MotaAction.g4 @@ -1270,7 +1270,7 @@ choices_s /* choices_s tooltip : choices: 给用户提供选项 -helpUrl : https://ckcz123.github.io/mota-js/#/event?id=switch%EF%BC%9A%E5%A4%9A%E9%87%8D%E6%9D%A1%E4%BB%B6%E5%88%86%E6%AD%A7 +helpUrl : https://ckcz123.github.io/mota-js/#/event?id=choices%EF%BC%9A%E7%BB%99%E7%94%A8%E6%88%B7%E6%8F%90%E4%BE%9B%E9%80%89%E9%A1%B9 default : ["","流浪者","woman"] var title=''; if (EvalString_1==''){ diff --git a/docs/event.md b/docs/event.md index 915ca3a8..979f00ab 100644 --- a/docs/event.md +++ b/docs/event.md @@ -1190,6 +1190,70 @@ text为提示文字,可以在这里给输入提示文字。这里同样可以 - if可以不断进行嵌套,一层套一层;如成立的场合再进行另一个if判断等。 - if语句内的内容执行完毕后将接着其后面的语句继续执行。 + +### switch:多重条件分歧 + +使用`{"type": "switch"}`可以比较判别值和不同分支的条件,根据判断结果选择不同的分支执行。 + +其大致写法如下: + +``` js +"x,y": [ // 实际执行的事件列表 + {"type": "swtich", "condition": "...", // 计算某个表达式 + "caseList": [ + {"case": "a", "action": [// 若表达式的值等于a则执行该处事件 + + ], + {"case": "b", "action": [// 若表达式的值等于b则执行该处事件 + + ], + {"case": "default", "action": [ // 没有条件成立则执行该处里的事件 + + ] + ] + }, +] +``` + +我们可以在condition中给出一个表达式(能将`status:xxx, item:xxx, flag:xxx`来作为参数),并计算它的值 + +如果某条件中的值与其相等,则将执行其对应的列表事件内容。 + +如果没有符合的值,则将执行`"default"`中的列表事件内容。 + +例如下面这个例子,将检查当前游戏难度并赠送不同属性。 + +``` js +"x,y": [ // 实际执行的事件列表 + {"type": "switch", "condition": "flag:hard", // 判断当前游戏难度 + "caseList": [ + {"case": "0", "action": [// 若表达式的值等于0则执行该处事件 + "当前为简单难度,赠送100点攻防!", + {"type": "setValue", "name": "status:atk", "value": "status:atk+100"}, + {"type": "setValue", "name": "status:def", "value": "status:def+100"}, + ], + {"case": "1", "action": [// 若表达式的值等于1则执行该处事件 + "当前为普通难度,赠送50点攻防!", + {"type": "setValue", "name": "status:atk", "value": "status:atk+50"}, + {"type": "setValue", "name": "status:def", "value": "status:def+50"}, + ], + {"case": "default", "action": [ // 其他难度下不赠送属性 + + ] + ] + }, +] +``` + +需要额外注意的几点: + +- 各个条件分支的判断是顺序执行的,因此若多个分支的条件都满足,将只执行最靠前的分支,同理,请不要在`"default"`分支后添加分支,这些分支将不可能被执行。 +-`"default"`分支并不是必要的,如果删除,则在没有满足条件的分支时将不执行任何事件。 +- 即使某个场合不执行事件,对应的action数组也需要存在,不过简单的留空就好。 +- switch可以不断进行嵌套,一层套一层;如某条件成立的场合再进行另一个switch判断等。 +- switch语句内的内容执行完毕后将接着其后面的语句继续执行。 + + ### choices:给用户提供选项 choices是一个很麻烦的事件,它将弹出一个列表供用户进行选择。