您的足迹: scripting

脚本编写

脚本编写

Mindustry 使用 JavaScript 作为脚本编写的语言。 Mindustry 使用的 JavaScript 基于 Rhino。 所以你可以使用 Java 的类。 例如:

java.lang.System.out.println("this is a test!");

脚本使用 js 的拓展名,被放置在 scripts/ 文件夹。

脚本的执行开始于名为 main.js 的文件夹,其他脚本可以用require("脚本名")语句导入主文件。典型的设置脚本如下所示:

scripts/main.js:

require("blocks");
require("items");

scripts/blocks.js:

const myBlock = extend(Conveyor, "terrible-conveyor", {
  // 各种字段...
  size: 3,
  health: 200
  //...
});

scripts/items.js:

const terribleium = Item("terribleium");
terribleium.color = Color.valueOf("ff0000");
//...

示例

监听事件

// 监听单位被摧毁的事件
Events.on(UnitDestroyEvent, event => {
  // 如果单位是玩家在屏幕上方显示文字
    if(event.unit.isPlayer()){
    Vars.ui.hudfrag.showToast("Pathetic.");
  }
})

找到能监听的事件最简单的方法就是看源码: Mindustry/blob/master/core/src/mindustry/game/EventType.java

显示对话框

const myDialog = new BaseDialog("Dialog Title");
// 加入“关闭”按钮
myDialog.addCloseButton();
// 在主体中添加文字
myDialog.cont.add("Goodbye.");
// 显示对话框
myDialog.show();

播放自定义声音

播放自定义声音很简单,你只需要提供在 /sounds 里存储的.mp3 或者 .ogg文件。

在这个例子中,我们存储了 example.mp3/sounds/example.mp3

使用链接库播放声音

scripts/alib.js:

exports.loadSound = (() => {
    const cache = {};
    return (path) => {
        const c = cache[path];
        if (c === undefined) {
            return cache[path] = loadSound(path);
        }
        return c;
    }
})();

scripts/main.js:

const lib = require("alib");
Events.on(WaveEvent, event => {
    // 加载 example.mp3
    const mySound = lib.loadSound("example");
    // 游戏引擎将会在 (X,Y)处生成声音
    mySound.at(1, 1);
})

//TODO test these out and add more examples

modding/scripting.txt · 最后更改: 2022/03/19 17:24 由 awa
CC Attribution-Share Alike 4.0 International