猫史档案馆


【岛3冷门编程技巧】

用户:七式草莓七式草莓查看:6 回复:5 评论:6 创建时间:2022-08-17T12:21:04


自己看吧

1.事件

world.onPlayerJoin(({ entity }) => {
    ...
})

等于

world.onPlayerJoin((event) => {
    var entity = event.entity
    ...
})

提示:其他事件类似,可以用于传递事件到其他函数(在面向对象编程很有用),示例:

function handler({ entity }){
    ...
}

world.onPlayerJoin((event) => {
    handler(event)
})

知识点:

解构赋值:简化取出对象里边的数据的写法(详见API)

2.装备

// 在玩家进入液体时把穿戴配件'潜水镜'在玩家头上附带
world.onFluidEnter(({ entity }) => {
    if (!entity.isPlayer) return;
    entity.player.addWearable({
        bodyPart: Box3BodyPart.HEAD,
        mesh: 'mesh/潜水镜.vb',
        orientation: new Box3Quaternion(0, 1, 0, 0),
        scale: new Box3Vector3(1, 1, 1),
        offset: new Box3Vector3(0, 0, 0.5),
    });
});

// 在玩家离开液体时把在玩家头上的穿戴配件删除
world.onFluidLeave(({ entity }) => {
    if (!entity.isPlayer) return;
    const headWears = entity.player.wearables(Box3BodyPart.HEAD); 
     // 假设只有1个装备 `headWears[0]` 
    entity.player.removeWearable(headWears[0]);
});

可以修改成

// 在玩家进入液体时把穿戴配件'潜水镜'在玩家头上附带,并且在玩家离开液体时把在玩家头上的穿戴配件删除
world.onFluidEnter(({ entity }) => {
    if (!entity.isPlayer) return;
    var wearable = entity.player.addWearable({
        bodyPart: Box3BodyPart.HEAD,
        mesh: 'mesh/潜水镜.vb',
        orientation: new Box3Quaternion(0, 1, 0, 0),
        scale: new Box3Vector3(1, 1, 1),
        offset: new Box3Vector3(0, 0, 0.5),
    });
    entity.nextFluidLeave().then(() => wearable.remove())
});

知识点:Box3Wearable.prototype.remove可以删除装备(Box3Wearable是什么请看API)

3.取消特定对话框

// 一个仅显示1秒的对话框
world.onPlayerJoin(({ entity }) => {
    var dialog = entity.player.dialog({
        type: Box3DialogType.TEXT,
        title: "吉吉喵",
        content: `你好,${entity.player.name},很高兴认识你。`,
    });
    sleep(1000).then(dialog.cancel())
})


回复

上一页1 页 / 共 1下一页
SKQASKQA

这不会有人不知道吧()

点赞2


评论


七式草莓七式草莓

第三个代码错了,更正:

// 一个仅显示1秒的对话框
world.onPlayerJoin(({ entity }) => {
    var dialog = entity.player.dialog({
        type: Box3DialogType.TEXT,
        title: "吉吉喵",
        content: `你好,${entity.player.name},很高兴认识你。`,
    });
    sleep(1000).then(() => dialog.cancel())
})

点赞0


评论


星星上的雪花星星上的雪花

第二个的话,如果订阅了next事件且事件未发生之前实体销毁/玩家退图,除nextDestroy以外都会报错)

点赞0


评论


一个STUB用户_6923702一个STUB用户_6923702

function handler({ entity }){
    ...
}

world.onPlayerJoin((event) => {
    handler(event)
})

可以改为

function handler(event){...}
world.onPlayerJoin(handler)

点赞0


评论


一个STUB用户_6923702一个STUB用户_6923702

以及有没有想过事件令牌可以取消(?

点赞0


评论