diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4 index e3bdd92d..4a9e589c 100644 --- a/_server/blockly/MotaAction.g4 +++ b/_server/blockly/MotaAction.g4 @@ -417,7 +417,7 @@ return code; */ setHero_s - : '更改角色行走图' EvalString Newline + : '更改角色行走图' EvalString? Newline ; /* setHero_s @@ -425,7 +425,8 @@ tooltip : setHero:更改角色行走图 helpUrl : https://ckcz123.github.io/mota-js/#/event?id=setHero-%e6%9b%b4%e6%94%b9%e8%a7%92%e8%89%b2%e8%a1%8c%e8%b5%b0%e5%9b%be colour : this.dataColor default : ["hero.png"] -var code = '{"type": "setHero", "name": "'+EvalString_0+'"},\n'; +EvalString_0 = EvalString_0 && (', "name": "'+EvalString_0+'"'); +var code = '{"type": "setHero"'+EvalString_0+'},\n'; return code; */ diff --git a/docs/event.md b/docs/event.md index 7f10a94e..ef0abda0 100644 --- a/docs/event.md +++ b/docs/event.md @@ -482,6 +482,26 @@ number为**要更改到的数字**,有关“数字”的定义详见参见[素 图块更改往往与[同一个点的多事件处理](#同一个点的多事件处理)相关。 +### setHero:更改角色行走图 + +使用`{"type": "setHero"}`可以更改角色行走图。 + +``` js +"x,y": [ // 实际执行的事件列表 + {"type": "setHero", "name": "hero2.png"}, // 将勇士行走图改成hero2.png;必须在全塔属性的images中被定义过。 + {"type": "setHero"}, // 如果不加name则恢复最初默认状态 + {"type": "setValue", "name": "status:name", "value": "'可绒'"}, // 修改勇士名;请注意value必须加单引号。 +] +``` + +name是可选的,代表目标行走图的文件名。 + +!> **目标行走图必须在全塔属性的this.images中被定义过,且宽度必须是128像素(高度不限)。** + +如果不加name,则恢复默认的角色行走图。 + +如果你需要同时修改勇士的名称,可以使用`setValue`事件来修改`status:name`,但请注意value必须加单引号,不然会报错。 + ### update: 立刻更新状态栏和地图显伤 如果你需要刷新状态栏和地图显伤,只需要简单地调用 `{"type": "update"}` 即可。 diff --git a/libs/control.js b/libs/control.js index 0ecaec87..752fb5b2 100644 --- a/libs/control.js +++ b/libs/control.js @@ -1974,7 +1974,7 @@ control.prototype.loadData = function (data, callback) { var icon = core.getFlag("heroIcon", "hero.png"); if (core.isset(core.material.images.images[icon])) { core.material.images.hero.src = core.material.images.images[icon].src; - core.material.icons.hero.height = core.material.images.hero.height/4; + core.material.icons.hero.height = core.material.images.images[icon].height/4; } core.events.afterLoadData(data); diff --git a/libs/events.js b/libs/events.js index 3ac53e3f..fde23369 100644 --- a/libs/events.js +++ b/libs/events.js @@ -570,14 +570,17 @@ events.prototype.doAction = function() { } break; case "setHero": - if (core.isset(core.material.images.images[data.name]) && core.material.images.images[data.name].width==128) { + { + var name = "hero.png"; + if (core.isset(core.material.images.images[data.name]) && core.material.images.images[data.name].width==128) + name = data.name; core.setFlag("heroIcon", data.name); core.material.images.hero.src = core.material.images.images[data.name].src; - core.material.icons.hero.height = core.material.images.hero.height/4; + core.material.icons.hero.height = core.material.images.images[data.name].height/4; core.drawHero(); + this.doAction(); + break; } - this.doAction(); - break; case "input": { var value;