移动
开始移动
@[move_route] {
"target": "物件名称",
"wait": true
}
补充说明:
"wait"|boolean|是否阻塞式执行。若为true,则脚本会暂停,直到移动动作完成。
为指定角色执行一个或多个移动/控制指令,并可选择是否阻塞后续脚本执行。需要与@[end_move_route]配合使用。
@[move_route]本身不直接执行动作,而是包裹一组移动指令。
停止移动
@[end_move_route]
移动控制指令
以下指令可以在 @[move_route] 和 @[end_move_route] 之间使用,控制物件的移动行为。
| 指令 | 参数 | 说明 | 示例 |
|---|---|---|---|
@[set_through] | true / false | 设置穿透状态,当为 true 时物件移动不会产生碰撞 | @[set_through] true |
@[move_up] | 无 | 向上移动一格 | @[move_up] |
@[move_down] | 无 | 向下移动一格 | @[move_down] |
@[move_left] | 无 | 向左移动一格 | @[move_left] |
@[move_right] | 无 | 向右移动一格 | @[move_right] |
@[move_straight] | 2 / 4 / 6 / 8 | 按方向码直线移动一格(2=↓, 4=←, 6=→, 8=↑) | @[move_straight] 2 |
@[move_random] | 无 | 随机方向移动一格 | @[move_random] |
@[move_toward_player] | 无 | 向玩家方向移动一格 | @[move_toward_player] |
@[move_toward_event] | "目标物件名称" | 向指定物件移动一格 | @[move_toward_event] "目标" |
@[jump] | [x, y](相对坐标) | 向相对坐标跳跃,x 和 y 为整数 | @[jump] [1,0](向右一格) |
@[jump_to_point] | [x, y](绝对坐标) | 跳跃到地图上的指定坐标 | @[jump_to_point] [15,8] |
@[jump_random] | 无 | 随机跳跃到上下左右一格 | @[jump_random] |
@[move_to_event] | "目标物件名称" | 直接移动到指定物件的位置 | @[move_to_event] "目标" |
@[move_to_point] | [x, y](绝对坐标) | 移动到地图上的指定坐标 | @[move_to_point] [15,8] |
@[move_straight_to_point] | [x, y](绝对坐标) | 直线移动到目标点,不会拐弯(即使碰到墙也不会绕路) | @[move_straight_to_point] [15,8] |
额外的,这些虽然不是移动指令,但也可以加在这之间使用。
| 指令 | 参数 | 说明 | 示例 |
|---|---|---|---|
@[set_move_speed] | 整数 | 设置物件移动速度 | @[set_move_speed] 1 |
@[wait] | 数字 | 等待指定时长(若 "wait": false 则不会阻塞) | @[wait] 30 |
@[wait_random_in_range] | [min, max] | 随机等待一个时长区间(若 "wait": false 则不会阻塞) | @[wait_random_in_range] [1,10] |
@[set_switch] | ["name", "value"] | 设置开关值 | @[set_switch] ["开关A", true] |
@[set_variable] | ["name", "value"] | 设置变量值 | @[set_variable] ["变量B", 114514] |
@[toggle_switch] | {"switchId": null} | 切换指定开关状态 | @[toggle_switch] {"switchId": null} |
@[add_variable] | {"varId": null, "varValue": 0} | 给变量增加数值 | @[add_variable] {"varId": null, "varValue": 1} |
@[play_se] | {"path":"...","db":0,"pan":0} | 播放音效 | @[play_se] {"path":"res://Sounds/...","db":0,"pan":0} |
@[queue_free] | 无 | 销毁当前物件 | @[queue_free] |
@[set_visible] | true / false | 设置该物件是否可见 | @[set_visible] false |
@[fade_to] | {"opacity":1,"time_sec":1} | 淡入淡出到指定透明度 | @[fade_to] {"opacity":1,"time_sec":1} |
@[set_dead_zone] | [x1, y1, x2, y2] 或不填 | 设置死区;不指定参数可视为取消 | @[set_dead_zone] [0,0,31,17] |
@[set_move_zone] | [x1, y1, x2, y2] 或不填 | 设置移动区域;不指定参数可视为取消 | @[set_move_zone] [14,7,17,10] |
@[set_z_index] | 数字 | 设置物件显示优先级 | @[set_z_index] 1 |
@[set_can_pass_group] | "组名" | 允许该物件可通过包含在组里的物件 | @[set_can_pass_group] "组A" |
示例:用黑魔法来让物件↑↑↓↓←→←→。
@[move_route] {"target": "物件A","wait": true}
@[move_up]
@[move_up]
@[move_down]
@[move_down]
@[move_left]
@[move_right]
@[move_left]
@[move_right]
@[end_move_route]
通过这个能让黑魔法编辑移动更为便捷,不需要为每个移动指令都单独指定物件。
循环移动路径
用于为物件设置一个循环执行的移动路线,物件会自动重复执行指定的移动指令序列。
@[set_event_loop_move_route] {
"target": "物件名称",
"loop_move_route": "[...]"
}
参数说明:
target:目标物件的名称。loop_move_route:一个 JSON 数组,包含一系列移动指令对象。每个指令对象格式为{"command":"指令名称", "parameters":[参数]}。
支持的指令与“移动控制指令”相同,例如 move_up、move_random 等,还可以使用 set_move_zone 来限定移动范围。
示例:
- 简单矩形循环:让物件按上→右→下→左的顺序循环移动。
@[set_event_loop_move_route] {
"target": "物件A",
"loop_move_route": "[
{\"command\":\"move_up\"},
{\"command\":\"move_right\"},
{\"command\":\"move_down\"},
{\"command\":\"move_left\"}
]"
}
- 范围内随机移动:将物件的移动范围限定在指定矩形区域内,然后执行随机移动。
@[set_event_loop_move_route] {
"target": "物件A",
"loop_move_route": "[
{\"command\":\"set_move_zone\", \"parameters\":[14, 7, 17, 10]},
{\"command\":\"move_random\"}
]"
}
其中 set_move_zone 的参数为 [左上角x, 左上角y, 右下角x, 右下角y],坐标单位为格子。
- 停止循环路径:将移动范围设置为全地图(或足够大的区域),使物件可以自由移动(实际上相当于取消限定范围)。
@[set_event_loop_move_route] {
"target": "物件A",
"loop_move_route": "[{\"command\":\"set_move_zone\", \"parameters\":[0,0,31,17]}]"
}
注意:
- 循环移动路径会一直重复执行,直到被新的
set_event_loop_move_route覆盖或物件被移除。 - 该指令不需要放在
@[move_route]和@[end_move_route]之间,它是一个独立的事件。