猫史档案馆


[被雨淋的干货] 实体查找器简写

用户:芜湖咸鱼芜湖咸鱼查看:30 回复:21 评论:30 创建时间:2021-02-19T21:35:23


我相信,如果你在做一些NPC,那代码很可能会像这样

// 判断玩家掉入虚空
world.querySelectorAll("player").forEach(e=>{
  if(e.position.y<0){e.hurt(Math.abs(e.position.y))}
})

// 添加NPC
world.querySelector(".皮卡丘")
world.querySelector(".留声机")
world.querySelector(".音乐盒")
world.querySelector(".喵神")
world.querySelector(".奖杯")
world.querySelector(".小天使")
// ...

如果加点其他的。。。

world.querySelector("#黑暗化的光芒翅膀-2").onClick(()=>{
world.querySelector("#黑暗化的光芒翅膀-2").say("Hello")
world.querySelector("#黑暗化的光芒翅膀-2").position.y+=1
})
// ...

很明显,重复性过高,所以一般人都会这样:

let entity = world.querySelector("#黑暗化的光芒翅膀-2")
entity.onClick(()=>{
entity.say("Hello")
entity.position.y+=1
})
// ...

但是,你一旦接收了onClick的entity参数,那么bug瞬间漫天飞。。。。。

所以,为了避免总是写到world.querySelector,我就水了几行代码,让你的代码可以像这样:

//用$$代替world.querySelectorAll
$$('.playExit').forEach(async (e) => {
    e.onEntityContact(async ({ entity, other }) => {
        if (other.isPlayer) {
            other.position.set(210, 2, 65);
        }
    })
})

//$代替world.querySelector
const dw = $('#death_welcomer');
dw.enableInteract = true; // 允许进行互动
dw.interactRadius = 3;   // 实体的互动范围
dw.interactColor = new Box3RGBColor(0, 1, 1);  // 互动提示的文字颜色

瞬间感觉代码整洁多了有木有!

所以可以看到水代码(划掉)简写代码是多么重要emotion_doge

我已经在很多项目都用到这个东西简写,感觉真的不错,所以建议大家都来用这个方法简写

代码仓库地址:https://github.com/alan-best/box3-share-code/blob/main/%E5%85%B6%E4%BB%96/%E5%AE%9E%E4%BD%93%E6%9F%A5%E6%89%BE%E5%99%A8%E7%AE%80%E5%86%99.js

注意事项:

- 不要用中文输入法输入$符号,不然会变成¥

- 这几行代码要放到代码文件第1行,后面才能使用

 

 

这帖子真的水(逃


回复

上一页1 页 / 共 1下一页
Alex79Alex79

sofa~

点赞0


评论


LUS圣武士LUS圣武士

板凳!

点赞0


评论


安歌兴业安歌兴业

地板!

点赞0


评论


小玥玥小月月小玥玥小月月

椅子!!!

点赞0


评论


AlcalaAlcala

地下室!

点赞0


评论


TobylaiTobylai

十 分 有 效()()

点赞0


评论


许pTgk许pTgk

天花板!

点赞0


评论


DL1DL1

那积木创作大赛还评奖吗??

点赞0


评论


YDS尹子YDS尹子

师傅加油

点赞1


评论


QBZ_QBZ_

shy yyds

点赞0


评论


神兽喵神兽喵

shy yyds!

点赞0


评论


隐日青空隐日青空

sky yyds(被雨淋湿的干货也是干货awa)

点赞0


评论


比较大的大提琴比较大的大提琴

被 雨 淋的 干货 简称 喵 [ emotion_doge保命]

点赞1


评论


BSS梅者如西BSS梅者如西

/* 实体查找器简写
 *
 * 功能:让代码中用到`world.querySelector`的地方更加简洁
 * 作者:Alan Best
 * 最近更新时间:2021-2-18
 * 此脚本用于控制台执行
 * 此脚本在代码文件中需要放置在开头
 *
 * 使用方法
 * 在执行此代码段后,
 * 你可以用 $ 来代替 world.querySelector
 *      用 $$ 代替 world.querySelectorAll
 *  代码运行之后在控制台中也可以这样使用
 */

const $ = world.querySelector,$$ = world.querySelectorAll;
global.$ = world.querySelector;global.$$=world.querySelectorAll;

点赞1


评论


战神_小火熊_光影轮回战神_小火熊_光影轮回

哇哇哇

点赞0


评论


白篮白篮

一直刷屏是不是脑 子有 问题?

点赞1


评论


闻乐溪闻乐溪

好家伙我看的都快吐了(话说刷顶程序借我用用()

点赞0


评论


SSR级学霸_拉文克劳SSR级学霸_拉文克劳

shycka持续诈尸!

点赞0


评论


SSR级学霸_拉文克劳SSR级学霸_拉文克劳

解释解释岛3图形化编辑器吧(代码小白跪了)

点赞0


评论


闻乐溪闻乐溪

大佬,顶帖程序借下行吗,急用

点赞1


评论


for (const npc of world.querySelectorAll('.npc')) {
    npc.enableInteract = true //允许当前npc实体触发交互
    npc.interactRadius = 1280 //交互范围
    if (npc.id == '控制') {
        npc.onInteract(async ({ entity }) => { 
            const result = await entity.player.dialog({
        type: Box3DialogType.INPUT,
        title: "作者",
        titleTextColor: new Box3RGBAColor(1, 1, 1, 1),
        titleBackgroundColor: new Box3RGBAColor(0, 0, 0, 0.98),
        content: `${entity.player.name},请输入地形种子码!`,
        confirmText: '确定', // 确定按钮上面的文字。按下确定按钮后,提交回答。
        placeholder: '请输入——', // 输入框背景上的提示文字。
        contentTextColor:  new Box3RGBAColor(1, 1, 1, 1),
        contentBackgroundColor: new Box3RGBAColor(0, 0, 0, 0.98),
        lookEye: entity.position.a喵(entity.player.facingDirection.scale(5)),
        lookTarget: entity,
    });
}//还要加模型名也可以
}//寒江宝贵模型代码资料(只复制了四分之一。。。)

话说吉吉喵不是发过这种代码了???(上面是寒江改编的)

点赞0


评论