猫史档案馆


【代码教程】实用の多层电梯代码模板

用户:时光下奔腾的小鹿时光下奔腾的小鹿查看:0 回复:4 评论:0 创建时间:2023-01-27T14:33:16


实现功能:每层可召唤电梯至该层,可选择去哪一层,支持2层及以上的楼层

console.clear();

const elevator_Floor = world.querySelector('#电梯'); // 需要一个名为'电梯'的实体,最好是一个地板
const elevator_Button = world.querySelectorAll('.电梯按钮'); // 若干个电梯按钮的实体,名称为'XX层按钮',前面的字符必须是数字
var elevator_Options = []; // 对应楼层的选项
const Floor_Postion_Y = [0,11,23]; // 每个楼层电梯需要移动的对应的y坐标
function get_Color(red,green,blue) { return new Box3RGBColor(red / 255,green / 255,blue / 255); } // 获取对应颜色
function elevator_Cmp(x,y) { // 自定义排序函数,可自行百度详细用法
    const xx = parseFloat(x); const yy = parseFloat(y);
    return xx - yy;
}
async function elevator_Init() { // 电梯初始化 *注:如果要增加楼层,需要添加一个按钮,名称为'XXX层电梯按钮',加上'电梯按钮'的标签;还需要在Floor_Postion_Y中增加一项该楼层地板的y坐标,其他地方都不用动
    for (var e of elevator_Button) { // 逐个处理每个电梯按钮
        e.floor = parseFloat(e.id); // 对应楼层
        e.enableInteract = true; // 可互动
        e.interactHint = '召唤电梯'; // 名称
        e.interactRadius = 1; // 距离
        e.interactColor = get_Color(0,255,0); // 颜色为绿色
        elevator_Options.push(`${e.floor}层`) // 在楼层选项中增加对应
    }
    world.onInteract(async( {targetEntity} ) => { // 处理互动事件
        if (!targetEntity.hasTag('电梯按钮') || elevator_Floor.is_Work) return ; // 这里只处理电梯按钮的事件,且电梯运行期间不处理召唤电梯事件
        const e = targetEntity; // 方便一点
        elevator_Floor.position.y = Floor_Postion_Y[e.floor]; // 电梯传送至对应楼层的位置
    });
    elevator_Options.sort(elevator_Cmp); // 对选项进行排序
    elevator_Floor.is_Work = false; // 默认不在运行
    elevator_Floor.enableInteract = true; // 可互动
    elevator_Floor.interactHint = '选择楼层'; // 名称
    elevator_Floor.interactRadius = 1.5; // 距离
    elevator_Floor.interactColor = get_Color(100,200,255); // 颜色为天蓝色
    elevator_Floor.onInteract(async({entity}) => { // 处理电梯的互动事件
        if (elevator_Floor.is_Work) return ; // 运行期间不处理
        const dialog = await entity.player.dialog({ // 获取目标楼层
            type: Box3DialogType.SELECT, // 选项类型对话框
            content: '请选择楼层:', // 文本
            options: elevator_Options // 楼层选项
        });
        if (!dialog || dialog === null) return ; // 直接叉掉则不处理
        const floor = dialog.index + 1; // 要去的楼层,因为下标从0开始所以要+1
        const target = Floor_Postion_Y[floor]; // 目标楼层的y坐标 
        if (elevator_Floor.is_Work) return ; // 如果电梯在询问楼层之间,有人提前使电梯开始运行,则直接跳出,防止电梯 左 右 为 难
        elevator_Floor.is_Work = true; // 开始运行
        if (elevator_Floor.position.y < target) { // 在目标楼层下面
            while (elevator_Floor.position.y < target) { elevator_Floor.position.y += 0.1; await sleep(5); } // 往上走
        } else { // 在上面
            while (elevator_Floor.position.y > target) { elevator_Floor.position.y -= 0.1; await sleep(5); } // 往下走
        }
        elevator_Floor.position.y = target; // 再次设置电梯坐标为目标楼层坐标,防止有偏差
        elevator_Floor.is_Work = false; // 停止运行
    })
}
elevator_Init(); // 别忘了运行初始化函数


回复

上一页1 页 / 共 1下一页
时光下奔腾的小鹿时光下奔腾的小鹿

炒鸡详细emotion_编程猫_点赞

点赞0


评论


AokenAoken

前排

点赞1


评论


一吱笑喵一吱笑喵

收藏

点赞1


评论


yyds二营长yyds二营长

ddd

点赞0


评论