commit
d1a5462a76
@ -238,6 +238,7 @@ action
|
|||||||
| win_s
|
| win_s
|
||||||
| lose_s
|
| lose_s
|
||||||
| if_s
|
| if_s
|
||||||
|
| switch_s
|
||||||
| while_s
|
| while_s
|
||||||
| break_s
|
| break_s
|
||||||
| continue_s
|
| continue_s
|
||||||
@ -1236,6 +1237,33 @@ var code = ['{"type": "if", "condition": "',expression_0,'",\n',
|
|||||||
return code;
|
return code;
|
||||||
*/;
|
*/;
|
||||||
|
|
||||||
|
switch_s
|
||||||
|
: '多重分歧 条件判定' ':' expression BGNL? Newline switchCase_s+ BEND Newline
|
||||||
|
|
||||||
|
|
||||||
|
/* switch_s
|
||||||
|
tooltip : switch: 多重条件分歧
|
||||||
|
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
|
||||||
|
default : ["判别值"]
|
||||||
|
colour : this.eventColor
|
||||||
|
var code = ['{"type": "switch", "condition": "',expression_0,'", "caseList": [\n',
|
||||||
|
switchCase_s_0,
|
||||||
|
'], },\n'].join('');
|
||||||
|
return code;
|
||||||
|
*/;
|
||||||
|
|
||||||
|
switchCase_s
|
||||||
|
: '如果是' expression '的场合' BGNL? Newline action+
|
||||||
|
|
||||||
|
|
||||||
|
/* switchCase_s
|
||||||
|
tooltip : 选项的选择
|
||||||
|
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
|
||||||
|
colour : this.subColor
|
||||||
|
var code = '{"case": "'+expression_0+'", "action": [\n'+action_0+']},\n';
|
||||||
|
return code;
|
||||||
|
*/;
|
||||||
|
|
||||||
choices_s
|
choices_s
|
||||||
: '选项' ':' EvalString? BGNL? '标题' EvalString? '图像' IdString? BGNL? Newline choicesContext+ BEND Newline
|
: '选项' ':' EvalString? BGNL? '标题' EvalString? '图像' IdString? BGNL? Newline choicesContext+ BEND Newline
|
||||||
|
|
||||||
@ -1983,6 +2011,15 @@ ActionParser.prototype.parseAction = function() {
|
|||||||
this.insertActionList(data["false"]),
|
this.insertActionList(data["false"]),
|
||||||
this.next]);
|
this.next]);
|
||||||
break;
|
break;
|
||||||
|
case "switch": // 多重条件分歧
|
||||||
|
var case_caseList = null;
|
||||||
|
for(var ii=data.caseList.length-1,caseNow;caseNow=data.caseList[ii];ii--) {
|
||||||
|
case_caseList=MotaActionBlocks['switchCase_s'].xmlText([
|
||||||
|
this.isset(caseNow.case)?MotaActionBlocks['evalString_e'].xmlText([caseNow.case]):"值",this.insertActionList(caseNow.action),case_caseList]);
|
||||||
|
}
|
||||||
|
this.next = MotaActionBlocks['switch_s'].xmlText([
|
||||||
|
MotaActionBlocks['evalString_e'].xmlText([data.condition]),case_caseList,this.next]);
|
||||||
|
break;
|
||||||
case "choices": // 提供选项
|
case "choices": // 提供选项
|
||||||
var text_choices = null;
|
var text_choices = null;
|
||||||
for(var ii=data.choices.length-1,choice;choice=data.choices[ii];ii--) {
|
for(var ii=data.choices.length-1,choice;choice=data.choices[ii];ii--) {
|
||||||
|
|||||||
@ -108,6 +108,11 @@ editor_blockly = function () {
|
|||||||
],
|
],
|
||||||
'事件控制':[
|
'事件控制':[
|
||||||
MotaActionBlocks['if_s'].xmlText(),
|
MotaActionBlocks['if_s'].xmlText(),
|
||||||
|
MotaActionFunctions.actionParser.parseList({"type": "switch", "condition": "判别量", "caseList": [
|
||||||
|
{"action": [{"type": "comment", "text": "当判别值是值的场合执行此事件"}]},
|
||||||
|
{"action": []},
|
||||||
|
{"case": "'default'", "action": [{"type": "comment", "text": "当没有符合的值的场合执行此事件"}]},
|
||||||
|
]}),
|
||||||
MotaActionBlocks['while_s'].xmlText(),
|
MotaActionBlocks['while_s'].xmlText(),
|
||||||
MotaActionBlocks['break_s'].xmlText(),
|
MotaActionBlocks['break_s'].xmlText(),
|
||||||
MotaActionBlocks['continue_s'].xmlText(),
|
MotaActionBlocks['continue_s'].xmlText(),
|
||||||
|
|||||||
@ -1190,6 +1190,70 @@ text为提示文字,可以在这里给输入提示文字。这里同样可以
|
|||||||
- if可以不断进行嵌套,一层套一层;如成立的场合再进行另一个if判断等。
|
- if可以不断进行嵌套,一层套一层;如成立的场合再进行另一个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:给用户提供选项
|
||||||
|
|
||||||
choices是一个很麻烦的事件,它将弹出一个列表供用户进行选择。
|
choices是一个很麻烦的事件,它将弹出一个列表供用户进行选择。
|
||||||
|
|||||||
@ -907,6 +907,16 @@ events.prototype.doAction = function() {
|
|||||||
core.events.insertAction(data["false"])
|
core.events.insertAction(data["false"])
|
||||||
this.doAction();
|
this.doAction();
|
||||||
break;
|
break;
|
||||||
|
case "switch": // 条件选择
|
||||||
|
var key = core.calValue(data.condition)
|
||||||
|
for (var i = 0; i < data.caseList.length; i++) {
|
||||||
|
if (core.calValue(data.caseList[i].case) == key || core.calValue(data.caseList[i].case) == "default") {
|
||||||
|
core.events.insertAction(data.caseList[i].action);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.doAction();
|
||||||
|
break;
|
||||||
case "choices": // 提供选项
|
case "choices": // 提供选项
|
||||||
if (core.status.replay.replaying) {
|
if (core.status.replay.replaying) {
|
||||||
if (core.status.replay.toReplay.length==0) { // 回放完毕
|
if (core.status.replay.toReplay.length==0) { // 回放完毕
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user